Mappage fenêtré de fichiers locaux THotPDF
Contrôle le mappage mémoire borné en lecture seule utilisé par LoadFromFile pour les grands documents locaux
Déclarations
property LocalFileMappingThreshold: Int64;
property LocalFileMappingWindowSize: Integer;
property LocalFileMappingCacheWindows: Integer;
property LocalFileMappingAdaptiveGeometry: boolean;
property LastLoadUsedMemoryMapping: boolean;
function GetLastMappedFileStatistics(
out Statistics: THPDFMappedFileStatistics): boolean;
Valeurs par défaut
| Réglage | Défaut | Signification |
|---|---|---|
LocalFileMappingThreshold | 8 MiB | Taille source minimale qui sélectionne le mappage mémoire ; zéro désactive le mappage |
LocalFileMappingWindowSize | 16 MiB | Octets couverts par une vue alignée sur la granularité d’allocation |
LocalFileMappingCacheWindows | 4 | Vues résidentes maximales conservées par le cache LRU |
LocalFileMappingAdaptiveGeometry | True | Redistribue la même limite d’octets mappés pour un accès séquentiel ou aléatoire soutenu |
Statistiques
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 renvoie True uniquement lorsque la dernière opération LoadFromFile a sélectionné le mappage
MapCount compte les nouvelles vues et CacheHits compte les lectures servies par une vue existante, ce qui permet aux applications et aux benchmarks d’ajuster la géométrie des fenêtres face aux patterns d’accès réels
MappedByteLimit reste fixe tandis que WindowSize et CacheWindowCount rapportent la géométrie active ; les octets mappés au pic, les compteurs de patterns et les indicateurs de mode rendent chaque adaptation observable
Types de sources avancés
THPDFMappedFileSource possède le handle de fichier partagé, l’objet de mappage, les fenêtres LRU synchronisées, le compteur de références et le chemin de repli positionnel
THPDFMappedFileStream expose une tranche seekable bornée sur cette source, tandis que THPDFMappedFileWindow décrit une vue interne en cache
Comportement
- Les vues ne sont mappées que lorsqu’une lecture atteint leur plage et sont évincées dans l’ordre des moins récemment utilisées
- Huit observations consécutives vers l’avant sélectionnent des fenêtres séquentielles plus grandes, tandis que huit observations distantes ou vers l’arrière sélectionnent jusqu’à 16 fenêtres plus petites d’accès aléatoire
- La géométrie adaptative ne dépasse jamais la limite d’octets dérivée de la taille configurée et du nombre de vues en cache
- Les lectures qui traversent une frontière de fenêtre sont copiées en segments bornés sans créer un buffer de tout le fichier
HPDFTransferStreamécrit les tranches mappées directement depuis chaque fenêtre résidente et comptabilise séparément les appels et octets de transfert direct, hors lectures du parser- Les streams du parser et les corps de stream PDF paresseux non modifiés partagent un même handle de fichier, objet de mappage et cache de fenêtres thread-safe
- La source autorise un renommage ou une suppression atomique pendant son activité, tandis que son mappage existant conserve une vue stable des octets ouverts
- Un échec de création du mappage sélectionne l’implémentation
TFileStreamd’origine, tandis qu’un échec ultérieur d’allocation de vue bascule la source partagée vers des lectures positionnelles verrouillées - Des tailles de fenêtre inférieures à 64 KiB et des nombres de vues hors de la plage 1 à 32 lèvent
ERangeError
Voir aussi : LocalFileMappingAdaptiveGeometry, LoadFromFile, Chargement de PDF évolutif, HPDFTransferStream, LoadedStreamMemoryThreshold