Сегментований кеш декодування завантажених зображень

HotPDF поєднує незалежно заблоковані метадані кешу з точною координацією singleflight за ключем

Паралельна робота

Шістнадцять сегментів метаданих обмежують конкуренцію під час пошуку, допуску та витіснення, тоді як дороге декодування зображень виконується поза блокуваннями кешу

Запити для різних ключів можуть декодуватися одночасно, а запити для того самого ключа обирають одного власника, чий завершений результат ділиться з усіма очікуючими викликачами

Глобальні межі

ImageCacheMaxBytes, максимальна кількість записів і максимальний розмір на запис застосовуються до сукупного вмісту всіх сегментів

Скорочення між сегментами зберігає точні налаштовані межі та уникає вибору щойно вставленого сегмента, коли інший сегмент може задовольнити запит на витіснення

Власність і життєвий цикл

AcquireLoadedImageStream та AcquireLoadedImageRegionAtResolution повертають незмінні дескриптори з підрахунком посилань, тому гарячі попадання та очікувачі singleflight ділять декодоване сховище без копіювання пікселів

Дескриптор залишається дійсним після витіснення з кешу, інвалідації та знищення документа, тоді як CreateBitmapCopy надає ізольований растровий образ, що належить викликачеві, коли потрібні змінні пікселі

Застарілі методи декодування з кешем зберігають контракт TBitmap, що належить викликачеві, матеріалізуючи одну копію з дескриптора

Телеметрія

GetImageDecodeConcurrencyInfo надає лічильники одночасності живі та сукупні

Лічильники надають придбання дескрипторів, копії сумісних растрових образів і скопійовані байти на додаток до паралельних власників та активності singleflight

Пов'язані API

IHPDFDecodedBitmapHandle · AcquireLoadedImageStream · AcquireLoadedImageRegionAtResolution · THPDFImageDecodeConcurrencyInfo