Ленивая загрузка дерева страниц
HotPDF может удерживать обычное загруженное дерево страниц PDF в виде компактной таблицы placeholder и разрешать отдельные страницы только тогда, когда какой-то API впервые к ним обращается
Активация
LazyPageTreeThreshold по умолчанию равен 4096 страницам и применяется к корректным деревьям страниц, чей корень предоставляет пригодную структуру /Count и /Kids
Чтобы отключить ленивую обработку дерева страниц, установите порог в 0 до загрузки
Файлы ниже порога и повреждённые деревья идут по существующему активному пути восстановления
Произвольный доступ
При первом обращении к странице значения /Count в поддеревьях используются, чтобы пропускать посторонние ветви, а indirect objects разрешаются через локальный для документа open-addressed индекс
Разрешённая страница сохраняется в своём placeholder-слоте, так что повторное обращение — это прямой cache hit
Обычные API загруженных страниц материализуют запрошенную страницу прозрачно, а MaterializeLoadedPage позволяет вызывающему коду явно подготовить заведомо нужную страницу
Полное разворачивание и мутации
MaterializeAllLoadedPages разворачивает оставшееся дерево в каноническом порядке страниц
Операции, которые структурно добавляют, удаляют, копируют, заменяют, перемещают, обращают, меняют местами, перестраивают или сохраняют загруженные страницы, выполняют полное разворачивание до того, как мутируют или сериализуют граф страниц
Так сохраняются прежняя семантика мутаций и сохранения, а доступ с чтением остаётся пропорциональным глубине пройденной ветви
Телеметрия
GetLoadedPageTreeStatistics сообщает о хранилище placeholder, материализованных страницах, глубине и объёме обхода, ёмкости объектного индекса, активности кеша и полных разворачиваниях — без принудительной материализации
Регрессионный рубеж покрывает 100 000 страниц с потолком прироста working set в 256 МиБ и потолком первого произвольного доступа в 500 мс на поддерживаемых Windows-целях
См. также: LazyPageTreeThreshold, MaterializeLoadedPage, MaterializeAllLoadedPages, GetLoadedPageTreeStatistics