Infrastructure de cache
HotPDF fournit un cache mémoire pondéré et borné pour les objets intermédiaires réutilisables, ainsi qu'un cache persistant de pages rendues utilisé par le rendu des documents chargés
Cache mémoire pondéré
THPDFWeightedCache dans HPDFCache détient des valeurs TObject, les indexe par AnsiString et évince les valeurs les moins récemment utilisées jusqu'à ce que leur poids combiné respecte MaxBytes
GetetTryGetpromeuvent un résultat en plus récemment utilisé et mettent à jour les statistiques de requêtesPeeketContainsKeyinspectent les entrées sans modifier la récence ni les statistiques de requêtesPutprend possession, remplace une clé existante sur place et accepte à nouveau le même objet sans risque lorsque seul son poids changeRemovelibère une entrée, tandis queExtracttransfère la propriété à l'appelant- Réduire
MaxBytesévince immédiatement les entrées, etTrimToBudgetexpose explicitement la même opération de convergence Hits,Misses,HitRate,Evictions,RejectionsetReplacementsexposent le comportement du cache, tandis queResetStatisticsdémarre un nouvel intervalle de mesure- La capacité des emplacements croît géométriquement et les entrées actives restent chaînées dans un ordre de récence à temps constant
Clés de contenu
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Les deux fonctions renvoient la même clé hexadécimale SHA-256 en minuscules pour un contenu identique
HPDFCacheKeyOfStream effectue le hachage sans allouer un second tableau d'octets de taille complète, lit les flux positionnables à partir de la position zéro et restaure leur position d'origine
Cache persistant de pages rendues
Définissez THotPDF.RenderCacheFolder pour activer le niveau disque utilisé après le cache en mémoire des pages rendues
- Les fichiers de page sont indexés par le contenu du document, l'index de page (de base zéro) et la résolution DPI
- Les mises à jour PNG et d'index sont atomiques, et les fichiers temporaires abandonnés sont supprimés lors de la récupération
- Les lectures de page actualisent la récence au niveau de la page, tandis que les limites de nombre de documents, de nombre de pages et d'octets évincent les données les moins récemment utilisées
GetLoadedFontDecodercopie en profondeur les tableaux gérés afin que les appelants ne puissent pas muter les mappings ou largeurs en cache- Le rechargement de documents, la mutation de graphe, l’invalidation de pages, JSON Patch et chaque affectation de
CMapResourcePatheffacent les décodeurs retenus - L’acquisition de décodeurs est sérialisée par document pour éviter l’analyse dupliquée d’une même police, mais le verrou ne rend pas la mutation concurrente de documents sûre
GetLoadedFontDecoderCacheInfoexpose les entrées, octets estimés, budget, hits, misses, analyses, évictions et invalidations
Cache fragmenté de décodage d’images chargées
Chaque instance THotPDF coordonne la réutilisation de décodage d’images chargées via 16 fragments de métadonnées verrouillés indépendamment
- La recherche et l’admission en cache ne retiennent que le fragment sélectionné pendant que le décodage coûteux des filtres et images s’exécute hors des verrous du cache
- Un singleflight exact par clé élit un seul décodage propriétaire et fait attendre aux appelants dupliqués le même résultat achevé
- La limite
ImageCacheMaxBytesconfigurée, la limite de nombre d’entrées et la limite par entrée restent globales à tous les fragments - Les entrées d’images décodées retiennent des handles immuables à comptage de références qui survivent à l’éviction et permettent aux renderers de dessiner les hits chauds sans matérialiser de copie
TBitmap - Les images achevées sont copiées dans des instances
TBitmappossédées par l’appelant afin que celui-ci ne puisse pas muter les pixels retenus du cache - Le rechargement de documents et l’invalidation du cache d’images effacent les entrées achevées tandis que les objets de vol actifs retiennent leur propre durée de vie à comptage de références
GetImageDecodeConcurrencyInforapporte les vols actifs, décodages propriétaires actifs et au pic, attentes, complétions et échecs
Cache de transformations ICC
HPDFICC partage les transformations complètes source-vers-sRGB via un cache LRU pondéré thread-safe de 64 Mio, y compris les profils d’épreuve et de sortie lorsqu’ils sont configurés
- La clé SHA-256 couvre le contenu complet des profils source, d’épreuve et de sortie, l’intention de rendu effective et le réglage de compensation du point noir
HPDFGetICCTransformCacheInforapporte hits, misses, évictions, rejets, nombre d’entrées, octets courants et octets maximumHPDFSetICCTransformCacheMaxBytesapplique immédiatement un nouveau budget à l’échelle du processus et évince au besoin les transformations les moins récemment utiliséesHPDFClearICCTransformCachelibère les transformations retenues et réinitialise les statistiques de requêtes sans invalider les interfaces de transformations déjà détenues par les appelants
Cache persistant de sous-ensembles de polices
Définissez THotPDF.FontSubsetCacheFolder pour activer les résultats réutilisables de sous-ensembles TrueType et OpenType tant que EnableFontSubsetting est actif
- La clé couvre les octets de la police d’origine, le bitmap exact des glyphes utilisés, le mode compact ou creux, et la version du schéma de cache
- Le chemin normal du magasin de polices GDI et le finaliseur de polices Unicode enregistrées réutilisent le même cache
- Les entrées compactes PDF/A préservent l’ancien-vers-nouveau GID map et le nouveau nombre de glyphes requis par
CIDToGIDMap - Les entrées sont validées avant usage, les entrées corrompues sont retirées, et le remplacement utilise un déplacement atomique dans le même dossier
FontSubsetCacheMaxBytess’applique immédiatement et évince les fichiers de cache exacts les moins récemment accédés sans parcourir des dossiers sans rapportGetFontSubsetCacheInforapporte hits, misses, écritures, évictions, corruptions, rejets, échecs d’écriture, octets et fichiersClearFontSubsetCachene retire du dossier configuré que les entrées de sous-ensembles de polices et les entrées temporaires abandonnées
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Cache persistant de pages rendues
Définissez THotPDF.RenderCacheFolder pour activer le niveau disque utilisé après le cache de pages rendues en mémoire
- Les fichiers de pages sont indexés par contenu du document, index de page en base zéro, DPI, visibilité effective du contenu optionnel, intent de couleur et politique de repli
- Les changements de calques et d’intent de couleur sélectionnent des variantes d’état réutilisables au lieu de jeter chaque bitmap en cache
- Les mises à jour de PNG et d’index sont atomiques, et les fichiers temporaires abandonnés sont retirés pendant la récupération
- Les lectures de pages rafraîchissent la récence au niveau page, tandis que les limites de documents, de pages et d’octets évincent les données les moins récemment utilisées
- Réduire une limite configurée converge immédiatement au lieu d'attendre une écriture ultérieure
- Les fichiers PNG corrompus, les lignes d'index périmées ou en double, les dossiers manquants et les dossiers de cache non indexés sont réparés automatiquement
- Les clés et coordonnées de document invalides sont rejetées avant l'accès au système de fichiers
- Les dossiers de documents reliés par des liens sont ignorés pendant la récupération, les lectures, les écritures, l'invalidation et l'éviction ; les liens et leurs fichiers cibles externes sont préservés
Propriété
THPDFWeightedCachedétient les valeurs passées àPut, sauf si une valeur est renvoyée parExtractTHPDFDiskPageCache.Lookuprenvoie un bitmap nouvellement alloué appartenant à l'appelant- Les valeurs de bitmap passées à
THPDFDiskPageCache.Storerestent la propriété de l'appelant
API associées
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Diagnostics de rendu et télémétrie des opérations