Vinduesopdelt lokal filmapping i THotPDF
Styrer den afgrænsede, skrivebeskyttede memory mapping, som LoadFromFile bruger til store lokale dokumenter
Deklarationer
property LocalFileMappingThreshold: Int64;
property LocalFileMappingWindowSize: Integer;
property LocalFileMappingCacheWindows: Integer;
property LocalFileMappingAdaptiveGeometry: boolean;
property LastLoadUsedMemoryMapping: boolean;
function GetLastMappedFileStatistics(
out Statistics: THPDFMappedFileStatistics): boolean;
Standardværdier
| Indstilling | Standardværdi | Betydning |
|---|---|---|
LocalFileMappingThreshold | 8 MiB | Mindestørrelse på kilden, før memory mapping vælges; nul deaktiverer mapping |
LocalFileMappingWindowSize | 16 MiB | Antal byte, som én view dækker, justeret efter allocation granularity |
LocalFileMappingCacheWindows | 4 | Maksimalt antal residente views, som LRU-cachen gemmer |
LocalFileMappingAdaptiveGeometry | True | Omfordeler den samme mapped-byte-grænse til vedvarende sekventiel eller vilkårlig adgang |
Statistik
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 returnerer True, kun når den seneste LoadFromFile-operation valgte mapping
MapCount tæller nye views, og CacheHits tæller læsninger, som et eksisterende view betjener, så programmer og benchmarks kan afstemme vinduesgeometrien efter reelle adgangsmønstre
MappedByteLimit forbliver fast, mens WindowSize og CacheWindowCount rapporterer den aktive geometri; peak mapped bytes, mønstertællere og tilstandsflag gør hver tilpasning observerbar
Avancerede kildetyper
THPDFMappedFileSource ejer det delte fil-handle, mapping-objektet, de synkroniserede LRU-vinduer, referenceantallet og den positionsbaserede fallback-sti
THPDFMappedFileStream eksponerer en afgrænset, søgbar slice over den kilde, mens THPDFMappedFileWindow beskriver ét cached internt view
Adfærd
- Views mappes først, når en læsning når deres interval, og udsmides i least-recently-used-rækkefølge
- Otte vedvarende fremadrettede observationer vælger større sekventielle vinduer, mens otte fjerne eller bagudrettede observationer vælger op til 16 mindre vinduer til vilkårlig adgang
- Adaptiv geometri overskrider aldrig den bytegrænse, der følger af den konfigurerede størrelse og antal cache-vinduer
- Læsninger, der krydser en vinduesgrænse, kopieres i afgrænsede segmenter uden at oprette en helfil-buffer
HPDFTransferStreamskriver mappede slices direkte fra hvert resident vindue og fører statistik over direkte transfer-kald og byte adskilt fra parser-læsninger- Parser-strømme og uændrede lazy PDF-strømmelegemer deler ét fil-handle, ét mapping-objekt og én trådsikker window-cache
- Kilden tillader atomisk omdøbning eller sletning, mens den er aktiv, og den eksisterende mapping fastholder et stabilt view af de åbnede byte
- Fejler oprettelsen af mappingen, vælges den oprindelige
TFileStream-implementering, og en senere fejl i view-allokering skifter den delte kilde til låste positionsbaserede fillæsninger - Vinduesstørrelser under 64 KiB og antal cache-vinduer uden for 1 til 32 udløser
ERangeError
Se også: LocalFileMappingAdaptiveGeometry, LoadFromFile, Skalerbar og tilfældig adgang PDF-indlæsning, HPDFTransferStream, LoadedStreamMemoryThreshold