Страничная организация cross-reference map

Когда карта перекрёстных ссылок документа переваливает за THotPDF.XRefMapPagingThreshold записей (по умолчанию 250000, примерно 8 МБ в плотном виде), проход полной загрузки упаковывает её в THPDFXRefMapPager и освобождает плотный массив — большие документы больше не держат каждую запись в выровненном словаре записей

THPDFXRefMapPager

Pager хранит отсортированный снимок упакованных 24-байтовых слотов (THPDFXRefMapSlot): номер объекта, тип записи, 16-битное поколение, смещение и расположение в object stream. GetEntry отвечает бинарным поиском через небольшую страницу на 64 записи, материализуемую по LRU, поэтому последовательные выборки декодируют одну страницу на множество записей; CollectFreeEntries извлекает набор свободных записей в порядке номеров объектов для пересборки при incremental update

Диагностика и потребители

GetLoadedXRefMapPaged сообщает о постраничном состоянии: число записей, байты снимка и счётчики попаданий и промахов окна; пересборка набора свободных записей при incremental save и разрешение косвенного /Length у лениво материализуемых членов потоков идут через pager, а установка порога в 0 полностью отключает paging