Geschichteter Dekodiercache für geladene Bilder

HotPDF kombiniert unabhängig gesperrte Cachemetadaten mit einer exakten Singleflight-Koordination pro Schlüssel

Parallele Arbeit

Sechzehn Metadatenshards begrenzen Konflikte bei Suche, Aufnahme und Verdrängung, während die aufwändige Bilddekodierung außerhalb der Cachesperren ausgeführt wird

Anforderungen für verschiedene Schlüssel können gleichzeitig dekodieren, und Anforderungen für denselben Schlüssel wählen einen Besitzer, dessen fertiges Ergebnis allen wartenden Aufrufern gemeinsam zur Verfügung steht

Globale Grenzen

ImageCacheMaxBytes, die maximale Anzahl von Einträgen und die maximale Größe je Eintrag gelten für den Gesamtinhalt aller Shards

Das Shard-übergreifende Bereinigen erhält exakte konfigurierte Grenzen und vermeidet die Auswahl des gerade eingefügten Shards, solange ein anderer Shard die Verdrängungsanforderung erfüllen kann

Besitz und Lebensdauer

AcquireLoadedImageStream und AcquireLoadedImageRegionAtResolution liefern unveränderliche referenzgezählte Handles, sodass warme Treffer und Singleflight-Wartende dekodierten Speicher ohne Pixelkopien teilen

Ein Handle bleibt nach Cacheverdrängung, Ungültigmachen und Zerstörung des Dokuments gültig, während CreateBitmapCopy eine isolierte aufrufereigene Bitmap bereitstellt, wenn veränderbare Pixel benötigt werden

Die älteren Methoden für zwischengespeicherte Dekodierung behalten ihren Vertrag einer aufrufereigenen TBitmap, indem sie eine Kopie aus dem Handle materialisieren

Telemetrie

GetImageDecodeConcurrencyInfo legt aktuelle und kumulierte Parallelitätszähler offen

Zusätzlich zu parallelen Besitzern und Singleflight-Aktivitäten zeigen die Zähler Handleabrufe, Kompatibilitäts-Bitmapkopien und kopierte Bytes

Zugehörige APIs

IHPDFDecodedBitmapHandle · AcquireLoadedImageStream · AcquireLoadedImageRegionAtResolution · THPDFImageDecodeConcurrencyInfo