THotPDF Windowed Local File Mapping
Řídí ohraničené read-only memory mapping, které LoadFromFile používá u velkých místních dokumentů
Deklarace
property LocalFileMappingThreshold: Int64;
property LocalFileMappingWindowSize: Integer;
property LocalFileMappingCacheWindows: Integer;
property LocalFileMappingAdaptiveGeometry: boolean;
property LastLoadUsedMemoryMapping: boolean;
function GetLastMappedFileStatistics(
out Statistics: THPDFMappedFileStatistics): boolean;
Výchozí hodnoty
| Nastavení | Výchozí | Význam |
|---|---|---|
LocalFileMappingThreshold | 8 MiB | Minimální velikost zdroje, při které se použije memory mapping; nula mapping vypne |
LocalFileMappingWindowSize | 16 MiB | Bajty pokryté jedním view zarovnaným na allocation granularity |
LocalFileMappingCacheWindows | 4 | Maximální počet rezidentních view, které LRU cache udržuje |
LocalFileMappingAdaptiveGeometry | True | Přerozdělí stejný limit mapovaných bajtů podle dlouhodobě sekvenčního nebo náhodného přístupu |
Statistiky
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 vrátí True jen tehdy, když poslední operace LoadFromFile zvolila mapping
MapCount počítá nová view a CacheHits čtení obsloužená existujícím view, takže aplikace i benchmarky mohou ladit geometrii oken proti reálným vzorcům přístupu
MappedByteLimit zůstává pevný, zatímco WindowSize a CacheWindowCount hlásí aktivní geometrii; peak mapované bajty, počty vzorců a příznaky režimu dělají každou adaptaci pozorovatelnou
Pokročilé typy zdrojů
THPDFMappedFileSource vlastní sdílený file handle, mapping objekt, synchronizovaná LRU okna, reference count a poziční fallback cestu
THPDFMappedFileStream vystavuje ohraničený seekovatelný řez nad tímto zdrojem a THPDFMappedFileWindow popisuje jedno interní view v cache
Chování
- View se mapují až ve chvíli, kdy čtení zasáhne jejich rozsah, a vyhazují se v pořadí least-recently-used
- Osm dlouhodobě dopředných pozorování vybere větší sekvenční okna, zatímco osm vzdálených či zpětných pozorování vybere až 16 menších oken pro random access
- Adaptivní geometrie nikdy nepřekročí limit bajtů odvozený z nastavené velikosti a počtu oken v cache
- Čtení překračující hranici okna se kopírují v ohraničených segmentech, aniž by vznikal buffer celého souboru
HPDFTransferStreamzapisuje mapované řezy přímo z každého rezidentního okna a přímé transfer calls a bajty účtuje odděleně od čtení parseru- Parser streamy a nezměněná lazy PDF stream těla sdílí jeden file handle, mapping objekt a thread-safe window cache
- Zdroj umožňuje atomické přejmenování či smazání i za běhu, přičemž existující mapping si udržuje stabilní view otevřených bajtů
- Když se mapping nepodaří vytvořit, použije se původní implementace přes
TFileStream; pozdější selhání alokace view přepne sdílený zdroj na uzamčená poziční čtení souboru - Velikosti oken pod 64 KiB a počty oken v cache mimo rozsah 1 až 32 vyhodí
ERangeError
Viz také: LocalFileMappingAdaptiveGeometry, LoadFromFile, Scalable Loading, HPDFTransferStream, LoadedStreamMemoryThreshold