Оконное отображение локального файла в THotPDF
Управляет ограниченным отображением в память только для чтения, которое LoadFromFile использует для больших локальных документов
Объявления
property LocalFileMappingThreshold: Int64;
property LocalFileMappingWindowSize: Integer;
property LocalFileMappingCacheWindows: Integer;
property LocalFileMappingAdaptiveGeometry: boolean;
property LastLoadUsedMemoryMapping: boolean;
function GetLastMappedFileStatistics(
out Statistics: THPDFMappedFileStatistics): boolean;
Значения по умолчанию
| Параметр | По умолчанию | Описание |
|---|---|---|
LocalFileMappingThreshold | 8 МиБ | Минимальный размер источника, при котором выбирается отображение в память; ноль отключает отображение |
LocalFileMappingWindowSize | 16 МиБ | Сколько байтов покрывает одно представление, выровненное по гранулярности выделения |
LocalFileMappingCacheWindows | 4 | Максимум резидентных представлений, удерживаемых LRU cache |
LocalFileMappingAdaptiveGeometry | True | Перераспределяет тот же лимит отображаемых байтов между устойчиво последовательным и случайным доступом |
Статистика
THPDFMappedFileStatistics = record
FileSize: Int64;
ConfiguredWindowSize: Int64;
ConfiguredCacheWindowCount: Integer;
WindowSize: Int64;
CacheWindowCount: Integer;
MappedByteLimit: Int64;
CurrentMappedBytes: Int64;
PeakMappedBytes: Int64;
GeometryChangeCount: Int64;
SequentialReadCalls: Int64;
RandomReadCalls: Int64;
AdaptiveGeometry: Boolean;
SequentialGeometryActive: Boolean;
RandomGeometryActive: Boolean;
ReadCalls: Int64;
BytesRead: Int64;
MapCount: Int64;
CacheHits: Int64;
FallbackReadCalls: Int64;
FallbackBytes: Int64;
DirectTransferCalls: Int64;
DirectTransferBytes: Int64;
end;
GetLastMappedFileStatistics возвращает True, только если последняя операция LoadFromFile выбрала отображение
MapCount считает новые представления, а CacheHits — чтения, обслуженные уже существующим представлением; это позволяет приложениям и бенчмаркам подбирать геометрию окон под реальные паттерны доступа
MappedByteLimit остаётся неизменным, а WindowSize и CacheWindowCount сообщают активную геометрию; пиковый объём отображённых байтов, счётчики паттернов и флаги режимов делают каждую адаптацию наблюдаемой
Дополнительные типы источников
THPDFMappedFileSource владеет общим file handle, объектом отображения, синхронизированными LRU-окнами, счётчиком ссылок и резервным позиционным путём чтения
THPDFMappedFileStream предоставляет ограниченный срез с поддержкой seek над этим источником, а THPDFMappedFileWindow описывает одно удерживаемое в cache внутреннее представление
Поведение
- Представления отображаются, только когда чтение достигает их диапазона, и вытесняются в порядке LRU
- Восемь устойчивых наблюдений чтения вперёд выбирают более крупные последовательные окна, а восемь дальних или обратных наблюдений — до 16 меньших окон случайного доступа
- Адаптивная геометрия никогда не превышает лимит байтов, выведенный из настроенного размера окна и количества окон cache
- Чтения, пересекающие границу окна, копируются ограниченными сегментами без создания буфера на весь файл
HPDFTransferStreamпишет отображённые срезы прямо из каждого резидентного окна и учитывает вызовы и байты прямого переноса отдельно от чтений парсера- Stream парсера и неизменённые тела lazy PDF stream используют один file handle, объект отображения и потокобезопасный window cache
- Источник допускает атомарное переименование или удаление активного файла, при этом существующее отображение хранит стабильное представление открытых байтов
- Если создать отображение не удалось, выбирается исходная реализация на
TFileStream, а последующая ошибка выделения представления переключает общий источник на позиционное чтение файла с блокировкой - Размер окна меньше 64 КиБ и количество окон вне диапазона от 1 до 32 вызывают
ERangeError
См. также: LocalFileMappingAdaptiveGeometry, LoadFromFile, Scalable Loading, HPDFTransferStream, LoadedStreamMemoryThreshold