Sharded Loaded-Image Decode Cache
Aplikace HotPDF kombinuje nezávisle zamknutá metadata cache s přesnou koordinací singleflight pro každý klíč
Parallel work
Šestnáct fragmentů metadat omezuje soupeření při vyhledávání, připouštění a vyřazování, zatímco nákladné dekódování obrazu probíhá mimo zámky cache
Požadavky na různé klíče se mohou dekódovat souběžně a požadavky na stejný klíč zvolí jednoho vlastníka, jehož dokončený výsledek je sdílen se všemi čekajícími volajícími
Global bounds
ImageCacheMaxBytes, maximální počet položek a maximální velikost na položku se vztahují na kombinovaný obsah všech fragmentů
Proškrtávání napříč fragmenty zachovává přesně nakonfigurované limity a vyhýbá se výběru právě vloženého fragmentu, když jiný fragment může požadavek na vyřazení uspokojit
Ownership and lifetime
AcquireLoadedImageStream a AcquireLoadedImageRegionAtResolution vracejí neměnné handly s reference counting, takže teplé zásahy a singleflight čekající sdílejí dekódované úložiště bez kopírování pixelů
Handl zůstává platný po vyřazení cache, zneplatnění a zničení dokumentu, zatímco CreateBitmapCopy poskytuje izolovanou bitmapu ve vlastnictví volajícího, když jsou vyžadovány měnitelné pixely
Starší cacheované metody dekódování si zachovávají smlouvu bitmapy TBitmap ve vlastnictví volajícího tím, že materializují jednu kopii z handlu
Telemetry
GetImageDecodeConcurrencyInfo vystavuje živé a kumulativní čítače souběžnosti
Čítače vystavují získání handle, kopie bitmap kompatibility a zkopírované bajty kromě paralelní aktivity vlastníků a singleflight
Související API
IHPDFDecodedBitmapHandle · AcquireLoadedImageStream · AcquireLoadedImageRegionAtResolution · THPDFImageDecodeConcurrencyInfo