THotPDF-Fensterbasierte lokale Dateiabbildung
Steuert die begrenzte schreibgeschützte Memory-Mapping, die LoadFromFile für große lokale Dokumente verwendet
Deklarationen
property LocalFileMappingThreshold: Int64;
property LocalFileMappingWindowSize: Integer;
property LocalFileMappingCacheWindows: Integer;
property LocalFileMappingAdaptiveGeometry: boolean;
property LastLoadUsedMemoryMapping: boolean;
function GetLastMappedFileStatistics(
out Statistics: THPDFMappedFileStatistics): boolean;
Standardwerte
| Einstellung | Standard | Bedeutung |
|---|---|---|
LocalFileMappingThreshold | 8 MiB | Mindestquellgröße, die Memory-Mapping wählt; null schaltet Mapping ab |
LocalFileMappingWindowSize | 16 MiB | Von einem an Allocation-Granularity ausgerichteten View abgedeckte Bytes |
LocalFileMappingCacheWindows | 4 | Maximale vom LRU-Cache vorgehaltene residente Views |
LocalFileMappingAdaptiveGeometry | True | Verteilt dasselbe Mapped-Byte-Limit für anhaltenden sequenziellen oder wahlfreien Zugriff neu |
Statistiken
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 liefert nur dann True, wenn die letzte LoadFromFile-Operation Mapping gewählt hat
MapCount zählt neue Views und CacheHits zählt Lesezugriffe, die ein vorhandener View bedient hat; so können Anwendungen und Benchmarks die Fenstergeometrie an realen Zugriffsmustern justieren
MappedByteLimit bleibt fix, während WindowSize und CacheWindowCount die aktive Geometrie melden; Peak-Mapped-Bytes, Musterzähler und Mode-Flags machen jede Anpassung beobachtbar
Erweiterte Quelltypen
THPDFMappedFileSource besitzt das gemeinsame File-Handle, das Mapping-Objekt, synchronisierte LRU-Fenster, den Referenzzähler und den positionalen Fallback-Pfad
THPDFMappedFileStream legt einen begrenzten seekbaren Ausschnitt über diese Quelle, während THPDFMappedFileWindow einen zwischengespeicherten internen View beschreibt
Verhalten
- Views werden erst gemappt, wenn ein Lesezugriff ihren Bereich erreicht, und werden in Least-Recently-Used-Ordnung verdrängt
- Acht anhaltende Vorwärtsbeobachtungen wählen größere sequenzielle Fenster, während acht entfernte oder rückwärtige Beobachtungen bis zu 16 kleinere Random-Access-Fenster wählen
- Adaptive Geometrie überschreitet nie das Byte-Limit, das sich aus konfigurierter Größe und Cache-Anzahl ergibt
- Lesezugriffe, die eine Fenstergrenze kreuzen, werden in begrenzten Segmenten kopiert, ohne einen Gesamtdatei-Puffer anzulegen
HPDFTransferStreamschreibt gemappte Ausschnitte direkt aus jedem residenten Fenster und erfasst Direct-Transfer-Aufrufe und -Bytes getrennt von Parser-Lesezugriffen- Parser-Streams und unveränderte lazy PDF-Stream-Bodies teilen sich ein File-Handle, ein Mapping-Objekt und einen thread-sicheren Fenster-Cache
- Die Quelle erlaubt atomares Umbenennen oder Löschen, während sie aktiv ist; ihr vorhandenes Mapping behält einen stabilen View der geöffneten Bytes
- Scheitert das Anlegen des Mappings, wird die ursprüngliche
TFileStream-Implementierung gewählt; scheitert später eine View-Allokation, schaltet die gemeinsame Quelle auf gesperrte positionale Dateilesezugriffe um - Fenstergrößen unter 64 KiB und Cache-Anzahlen außerhalb von 1 bis 32 lösen
ERangeErroraus
Siehe auch: LocalFileMappingAdaptiveGeometry, LoadFromFile, Skalierbares Laden, HPDFTransferStream, LoadedStreamMemoryThreshold