峰值内存调度
HotPDF 在竞争的高占用操作分配其主要工作集之前,通过一个进程范围的字节预算准入它们
覆盖的操作
- 文档加载
- 文档加载
- 同步、缓存和渐进页面渲染
- 选择性流优化
- 有界并行图像优化
每个操作预留从其源大小、渲染尺寸、DPI、流阈值和工作进程数派生的保守估计,然后在现有操作遥测边界释放预留
准入策略
- 默认进程范围预算为
536870912字节 - 值
0禁用预算限制 - 等待者按 FIFO 顺序准入,因此后来的小请求不会饿死较早的大请求
- 大于配置预算的请求只能在没有其他预留活动时运行
- 增加预算可以立即准入排队工作,而减少预算绝不中断活动工作
- 排队等待以有界的 50 ms 间隔轮询操作取消令牌
无争用路径不分配等待事件,而争用操作使用一个私有事件并且不旋转
配置
PDF.PeakMemorySchedulerEnabled := True;
PDF.PeakMemorySchedulerBudgetBytes := 768 * 1024 * 1024;
PDF.ResetPeakMemorySchedulerStatistics;
if PDF.GetPeakMemorySchedulerStatistics(Stats) then
begin
WriteLn(Stats.PeakReservedBytes);
WriteLn(Stats.DelayedAdmissionCount);
WriteLn(Stats.TotalWaitMilliseconds);
end;
PeakMemorySchedulerEnabled 是每个组件级的,可以为受信任的隔离工作绕过准入,而 PeakMemorySchedulerBudgetBytes 配置共享的进程范围调度器
统计
THPDFPeakMemorySchedulerStatistics 报告当前和峰值预留字节、当前和峰值活动预留、当前和峰值等待者、总准入和延迟准入、超大准入、取消以及聚合等待时间
THPDFOperationTelemetry.ScheduledMemoryBytes、MemorySchedulerWaitMilliseconds 和 MemorySchedulerDelayed 将调度成本归因于最近的操作