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