Планирование пиковой памяти
HotPDF допускает конкурирующие ресурсоёмкие операции через единый байтовый бюджет на весь процесс до того, как они выделят свои основные рабочие наборы
Охватываемые операции
- Загрузка документа
- Синхронный, кешированный и прогрессивный рендеринг страниц
- Параллельный рендеринг страниц, тайлов и полос
- Выборочная оптимизация stream'ов
- Ограниченная параллельная оптимизация изображений
Каждая операция резервирует консервативную оценку, вычисленную из размера источника, размеров рендеринга, DPI, порога stream и числа воркеров, а затем снимает резерв на существующей границе телеметрии операции
Политика допуска
- Бюджет по умолчанию на весь процесс —
536870912байт - Значение
0отключает лимитирование бюджета - Ожидающие допускаются в порядке FIFO, поэтому поздние мелкие запросы не могут заморить голодом более ранний крупный запрос
- Запрос больше настроенного бюджета может выполняться, только когда нет других активных резервов
- Увеличение бюджета может немедленно допустить работу из очереди, а уменьшение никогда не прерывает активную работу
- Ожидания в очереди опрашивают cancellation token операции с ограниченным интервалом 50 мс
В бесконфликтном случае событие ожидания не аллоцируется вовсе, а при конкуренции операция использует одно приватное событие и не крутится в цикле ожидания
Конфигурация
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 сообщает текущие и пиковые значения зарезервированных байтов, активных резервов и очереди ожидания, общее и отложенное число допусков, допуски oversized-запросов, отмены и суммарное время ожидания
THPDFOperationTelemetry.ScheduledMemoryBytes, MemorySchedulerWaitMilliseconds и MemorySchedulerDelayed относят стоимость планирования к самой последней операции