Cache de décodage d'images chargées fragmenté
HotPDF combine des métadonnées de cache à verrous indépendants avec une coordination singleflight exacte par clé
Travail parallèle
Seize fragments de métadonnées limitent la contention lors de la recherche, de l'admission et de l'éviction tandis que le décodage coûteux d'images s'exécute hors des verrous de cache
Les demandes pour différentes clés peuvent décoder en parallèle et les demandes pour la même clé élisent un propriétaire dont le résultat terminé est partagé avec tous les appelants en attente
Limites globales
ImageCacheMaxBytes, le nombre maximal d'entrées et la taille maximale par entrée s'appliquent au contenu combiné de tous les fragments
Le rognage inters-fragments préserve les limites exactes configurées et évite de sélectionner le fragment tout juste inséré lorsqu'un autre fragment peut satisfaire la demande d'éviction
Propriété et durée de vie
AcquireLoadedImageStream et AcquireLoadedImageRegionAtResolution retournent des handles immuables à comptage de références, de sorte que les hits chauds et les personnes en attente singleflight partagent le stockage décodé sans copier de pixels
Un handle reste valide après éviction du cache, invalidation et destruction du document, tandis que CreateBitmapCopy fournit un bitmap isolé appartenant à l'appelant lorsque des pixels mutables sont exigés
Les méthodes de décodage mises en cache héritées conservent leur contrat TBitmap appartenant à l'appelant en matérialisant une copie depuis le handle
Télémétrie
GetImageDecodeConcurrencyInfo expose les compteurs de concurrence vivants et cumulés
Les compteurs exposent les acquisitions de handles, les copies de bitmaps de compatibilité et les octets copiés en plus de l'activité parallèle de propriétaire et singleflight
API associées
IHPDFDecodedBitmapHandle · AcquireLoadedImageStream · AcquireLoadedImageRegionAtResolution · THPDFImageDecodeConcurrencyInfo