Caché por shards de decodificación de imágenes cargadas

HotPDF combina metadatos de caché con bloqueo independiente por shard y una coordinación singleflight exacta por clave

Trabajo en paralelo

Dieciséis shards de metadatos limitan la contención durante lookup, admisión y expulsión, mientras que la costosa decodificación de imágenes corre fuera de los locks de la caché

Las solicitudes de claves distintas pueden decodificar en paralelo, y las solicitudes de la misma clave eligen a un único dueño cuyo resultado completado se comparte con todos los llamadores en espera

Límites globales

ImageCacheMaxBytes, el conteo máximo de entradas y el tamaño máximo por entrada aplican al contenido combinado de todos los shards

El recorte entre shards preserva los límites configurados exactos y evita seleccionar el shard recién insertado cuando otro shard puede satisfacer la solicitud de expulsión

Propiedad y ciclo de vida

AcquireLoadedImageStream y AcquireLoadedImageRegionAtResolution devuelven handles inmutables con conteo de referencias, de modo que los aciertos en caliente y los que esperan en singleflight comparten el almacenamiento decodificado sin copiar píxeles

Un handle sigue siendo válido después de la expulsión de la caché, la invalidación y la destrucción del documento, mientras que CreateBitmapCopy proporciona un bitmap aislado propiedad del llamador cuando se requieren píxeles mutables

Los métodos heredados de decodificación cacheada conservan su contrato de TBitmap propiedad del llamador materializando una copia desde el handle

Telemetría

GetImageDecodeConcurrencyInfo expone contadores de concurrencia en vivo y acumulativos

Los contadores exponen adquisiciones de handles, copias de bitmap por compatibilidad y bytes copiados, además de la actividad paralela de dueños y singleflight

APIs relacionadas

IHPDFDecodedBitmapHandle · AcquireLoadedImageStream · AcquireLoadedImageRegionAtResolution · THPDFImageDecodeConcurrencyInfo