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