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