Политики допуска в кэш THotPDF

Управляет допуском в кэш независимо для исходных сжатых диапазонов, декодированных изображений, скомпилированных display list страниц и отрендеренных растровых страниц

Объявления

THPDFCacheLayerKind = (clkRawCompressed, clkDecoded,
  clkDisplayList, clkRaster);

THPDFCacheAdmissionPolicy = record
  Enabled: boolean;
  AdaptiveAdmission: boolean;
  MaxEntries: Integer;
  MaxTotalBytes: Int64;
  MaxEntryBytes: Int64;
end;

THPDFCacheAdmissionStatistics = record
  Enabled: boolean;
  AdaptiveAdmission: boolean;
  MaxEntries: Integer;
  MaxTotalBytes: Int64;
  MaxEntryBytes: Int64;
  EntryCount: Integer;
  CurrentBytes: Int64;
  HitCount: Int64;
  MissCount: Int64;
  AdmissionCount: Int64;
  RejectionCount: Int64;
  EvictionCount: Int64;
  FrequencyAdmissionCount: Int64;
  FrequencyRejectionCount: Int64;
  FrequencyAgingCount: Int64;
end;

procedure ResetCacheAdmissionPolicies;
procedure SetCacheAdmissionPolicy(Kind: THPDFCacheLayerKind;
  const Policy: THPDFCacheAdmissionPolicy);
function GetCacheAdmissionPolicy(Kind: THPDFCacheLayerKind;
  out Policy: THPDFCacheAdmissionPolicy): boolean;
function GetCacheAdmissionStatistics(Kind: THPDFCacheLayerKind;
  out Statistics: THPDFCacheAdmissionStatistics): boolean;

Ограничения по умолчанию

СлойЗаписиВсего байтНа записьАдаптивный
clkRawCompressed82 MiB256 KiBДа
clkDecoded25632 MiB16 MiBДа
clkDisplayList6464 MiB16 MiBДа
clkRaster8128 MiB64 MiBДа

Поведение допуска

Включённая политика требует положительных лимитов на число записей, общий объём в байтах и объём одной записи, причём лимит на запись не должен превышать общий лимит

Изменение одного слоя никогда не затрагивает остальные, а снижение лимита немедленно вытесняет наименее недавно использовавшиеся записи, пока затронутый кэш не впишется в новый размер

При включённом AdaptiveAdmission порядок LRU остаётся быстрым путём по давности обращения, а четырёхсторонний ограниченный frequency sketch перед вытеснением сравнивает нового кандидата с каждым обязательным вытесняемым элементом

Более холодный кандидат пропускает удержание, не нарушая текущий запрос, при равной частоте побеждает более новый кандидат, а периодическое старение счётчиков позволяет изменившемуся рабочему набору заменить исторически горячие записи

Установите AdaptiveAdmission в False, чтобы сохранить те же жёсткие границы при чисто LRU-допуске

Записи крупнее MaxEntryBytes используются в текущей операции, но не удерживаются в кэше, чтобы одна большая декодированная картинка, display list или отрендеренная страница не вытеснила пригодные к повторному использованию мелкие записи

Установка Enabled в False с нулевыми лимитами отключает удержание для этого слоя, а ResetCacheAdmissionPolicies восстанавливает все четыре значения по умолчанию

Статистика

THPDFCacheAdmissionStatistics возвращает активные лимиты, режим адаптивности, текущую занятость в записях и байтах, попадания, промахи, принятые и отклонённые допуски, вытеснения по исчерпанию ёмкости, частотные решения и циклы старения

Статистика исходных диапазонов описывает автоматический coalescing-источник, создаваемый LoadFromRandomAccessSource; явно переданный THPDFCoalescingRandomAccessSource сохраняет конфигурацию, выбранную вызывающей стороной

Свойства совместимости

RenderCacheCapacity обновляет лимит записей растрового слоя, а ImageCacheMaxBytes — общий лимит в байтах для декодированных изображений; оба проходят ту же валидацию политики и немедленную подрезку

См. также: Scalable Loading, THPDFCoalescingRandomAccessSource, LoadFromRandomAccessSource