Mapping locale a finestre di THotPDF
Controlla il mapping in memoria a finestre, di sola lettura e limitato, usato da LoadFromFile per i documenti locali di grandi dimensioni
Dichiarazioni
property LocalFileMappingThreshold: Int64;
property LocalFileMappingWindowSize: Integer;
property LocalFileMappingCacheWindows: Integer;
property LocalFileMappingAdaptiveGeometry: boolean;
property LastLoadUsedMemoryMapping: boolean;
function GetLastMappedFileStatistics(
out Statistics: THPDFMappedFileStatistics): boolean;
Valori predefiniti
| Impostazione | Valore predefinito | Significato |
|---|---|---|
LocalFileMappingThreshold | 8 MiB | Dimensione minima della sorgente che seleziona il mapping in memoria; zero disabilita il mapping |
LocalFileMappingWindowSize | 16 MiB | Byte coperti da una view allineata alla granularità di allocazione |
LocalFileMappingCacheWindows | 4 | Numero massimo di view residenti trattenute dalla cache LRU |
LocalFileMappingAdaptiveGeometry | True | Ridistribuisce lo stesso limite di byte mappati per accesso sequenziale o random sostenuto |
Statistiche
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 restituisce True solo quando l'ultima operazione LoadFromFile ha selezionato il mapping
MapCount conta le nuove view e CacheHits conta le letture servite da una view esistente, così applicazioni e benchmark possono tarare la geometria delle finestre sui reali pattern di accesso
MappedByteLimit resta fisso mentre WindowSize e CacheWindowCount riportano la geometria attiva; i byte mappati di picco, i conteggi dei pattern e i flag di modalità rendono ogni adattamento osservabile
Tipi di sorgente avanzati
THPDFMappedFileSource possiede l'handle di file condiviso, l'oggetto di mapping, le finestre LRU sincronizzate, il reference count e il percorso di fallback posizionale
THPDFMappedFileStream espone una slice seekable e limitata su quella sorgente, mentre THPDFMappedFileWindow descrive una singola view interna in cache
Comportamento
- Le view vengono mappate solo quando una lettura raggiunge il loro intervallo e vengono rimosse in ordine least-recently-used
- Otto osservazioni consecutive in avanti selezionano finestre sequenziali più grandi, mentre otto osservazioni distanti o all'indietro selezionano fino a 16 finestre più piccole ad accesso random
- La geometria adattiva non supera mai il limite di byte derivato da dimensione e numero di finestre configurati
- Le letture che attraversano un confine di finestra vengono copiate in segmenti limitati senza creare un buffer sull'intero file
HPDFTransferStreamscrive le slice mappate direttamente da ciascuna finestra residente e registra chiamate e byte dei trasferimenti diretti separatamente dalle letture del parser- Gli stream del parser e i corpi degli stream PDF lazy non modificati condividono un unico handle di file, oggetto di mapping e cache di finestre thread-safe
- La sorgente consente rename o eliminazione atomici mentre è attiva, e il mapping esistente conserva una view stabile dei byte aperti
- Se la creazione del mapping non riesce si seleziona l'implementazione originale basata su
TFileStream, mentre un successivo fallimento di allocazione di una view sposta la sorgente condivisa su letture posizionali del file con lock - Dimensioni di finestra inferiori a 64 KiB e numeri di finestre in cache fuori dall'intervallo 1-32 sollevano
ERangeError
Vedi anche: LocalFileMappingAdaptiveGeometry, LoadFromFile, Caricamento PDF scalabile e ad accesso casuale, HPDFTransferStream, LoadedStreamMemoryThreshold