Infraestructura de caché
HotPDF proporciona una caché de memoria ponderada y limitada para objetos intermedios reutilizables, y una caché persistente de páginas renderizadas que usa el renderizado de documentos cargados
Caché de memoria ponderada
THPDFWeightedCache en HPDFCache es propietaria de los valores TObject, los indexa por AnsiString y desaloja los valores usados menos recientemente hasta que su peso combinado se ajusta a MaxBytes
GetyTryGetpromueven un acierto al usado más recientemente y actualizan las estadísticas de solicitudesPeekyContainsKeyinspeccionan entradas sin cambiar la recencia ni las estadísticas de solicitudesPuttoma posesión, reemplaza una clave existente en el lugar y acepta de forma segura el mismo objeto nuevamente cuando solo cambia su pesoRemovelibera una entrada, mientras queExtracttransfiere la posesión a quien llama- Reducir
MaxBytesdesaloja entradas de inmediato, yTrimToBudgetexpone la misma operación de convergencia de forma explícita Hits,Misses,HitRate,Evictions,RejectionsyReplacementsexponen el comportamiento de la caché, mientras queResetStatisticsinicia un nuevo intervalo de medición- La capacidad de los espacios crece geométricamente y las entradas activas permanecen vinculadas en orden de recencia de tiempo constante
Claves de contenido
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Ambas funciones devuelven la misma clave hexadecimal SHA-256 en minúsculas para el mismo contenido
HPDFCacheKeyOfStream calcula el hash sin asignar un segundo arreglo de bytes de tamaño completo, lee los flujos de búsqueda desde la posición cero y restaura su posición original
Caché persistente de páginas renderizadas
Establezca THotPDF.RenderCacheFolder para habilitar el nivel de disco que se usa después de la caché en memoria de páginas renderizadas
- El presupuesto predeterminado es de 32 MiB con un límite estricto de 128 entradas, y un presupuesto de cero bytes desactiva la retención
- Los diccionarios de fuentes indirectos compartidos reutilizan un mismo núcleo parseado entre páginas, incluso cuando las páginas usan nombres de recursos distintos
- La extracción de texto, la exportación SVG, el reemplazo de texto cargado y las peticiones explícitas de decodificador comparten la misma cache
GetLoadedFontDecodercopia en profundidad los arrays gestionados para que quien llama no pueda mutar los mapeos ni los anchos en cache- Recargar el documento, mutar el grafo, invalidar páginas, aplicar JSON Patch y cada asignación de
CMapResourcePathborra los decodificadores retenidos - La adquisición de decodificadores se serializa por documento para evitar parsear dos veces la misma fuente, pero el bloqueo no hace segura la mutación concurrente del documento
GetLoadedFontDecoderCacheInfoexpone entradas, bytes estimados, presupuesto, aciertos, fallos, parseos, expulsiones e invalidaciones
Cache de decodificación de imágenes cargadas por shards
Cada instancia de THotPDF coordina la reutilización de decodificación de imágenes cargadas mediante 16 shards de metadatos con bloqueo independiente
- La búsqueda y admisión en cache retienen solo el shard seleccionado, mientras que la decodificación costosa de filtros e imágenes se ejecuta fuera de los bloqueos de cache
- Un singleflight exacto por clave elige una decodificación propietaria y hace que las llamadas duplicadas esperen el mismo resultado ya completado
- El
ImageCacheMaxBytesconfigurado, el límite de número de entradas y el límite por entrada siguen siendo globales en todos los shards - Las entradas de imágenes decodificadas contienen handles inmutables con conteo de referencias que sobreviven a la expulsión y permiten a los renderizadores dibujar aciertos en caliente sin materializar una copia
TBitmap - Las imágenes completadas se copian en instancias
TBitmappropiedad de quien llama, de modo que no pueda mutar los píxeles retenidos en cache - Recargar el documento e invalidar la cache de imágenes borra las entradas completadas, mientras que los objetos de flight activos conservan su propio tiempo de vida con conteo de referencias
GetImageDecodeConcurrencyInfoinforma de flights activos, decodificaciones propietarias activas y en pico, esperas, finalizaciones y fallos
Cache de transformaciones ICC
HPDFICC comparte transformaciones completas de origen a sRGB mediante una cache LRU ponderada thread-safe de 64 MiB, incluidos los perfiles de prueba y de salida cuando están configurados
- La clave SHA-256 cubre el origen completo, el contenido de los perfiles de prueba y de salida, el rendering intent efectivo y el ajuste de compensación de punto negro
HPDFGetICCTransformCacheInfoinforma de aciertos, fallos, expulsiones, rechazos, número de entradas, bytes actuales y bytes máximosHPDFSetICCTransformCacheMaxBytesaplica de inmediato un nuevo presupuesto para todo el proceso y expulsa las transformaciones usadas menos recientemente según sea necesarioHPDFClearICCTransformCachelibera las transformaciones retenidas y restablece las estadísticas de peticiones sin invalidar las interfaces de transformación ya retenidas por quienes llaman
Cache persistente de subconjuntos de fuentes
Defina THotPDF.FontSubsetCacheFolder para habilitar resultados de subconjunto TrueType y OpenType reutilizables mientras EnableFontSubsetting esté activo
- La clave cubre los bytes originales de la fuente, el bitmap exacto de glifos usados, el modo compacto o disperso y la versión del esquema de cache
- Tanto la ruta normal de almacén de fuentes GDI como el finalizador de fuentes Unicode registrado reutilizan la misma cache
- Las entradas compactas de PDF/A conservan el mapa de GID antiguo-a-nuevo y el nuevo conteo de glifos que necesita
CIDToGIDMap - Las entradas se validan antes de usarse, las corruptas se eliminan y el reemplazo usa un movimiento atómico dentro del mismo directorio
FontSubsetCacheMaxBytesse aplica de inmediato y expulsa los archivos exactos de cache accedidos menos recientemente sin recorrer carpetas no relacionadasGetFontSubsetCacheInfoinforma de aciertos, fallos, escrituras, expulsiones, corrupción, rechazos, fallos de escritura, bytes y archivosClearFontSubsetCacheelimina solo las entradas de subconjuntos de fuentes y las entradas temporales abandonadas de la carpeta configurada
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Cache persistente de páginas renderizadas
Defina THotPDF.RenderCacheFolder para habilitar el nivel de disco usado tras la cache en memoria de páginas renderizadas
- Los archivos de página se indexan por contenido del documento, índice de página de base cero, DPI, visibilidad efectiva de contenido opcional, intención de color y política de fallback
- Los cambios de capa y de intención de color seleccionan variantes de estado reutilizables en lugar de descartar todos los bitmaps en cache
- Las actualizaciones de PNG y del índice son atómicas, y los archivos temporales abandonados se eliminan durante la recuperación
- Las lecturas de página actualizan la antigüedad a nivel de página, mientras que los límites de documentos, páginas y bytes expulsan los datos usados menos recientemente
- Reducir un límite configurado converge de inmediato en lugar de esperar una escritura posterior
- Los PNG corruptos, las filas de índice obsoletas o duplicadas, las carpetas ausentes y las carpetas de cache sin indexar se reparan automáticamente
- Las claves de documento y coordenadas no válidas se rechazan antes de acceder al sistema de archivos
- Las carpetas de documentos que son links se omiten durante la recuperación, las lecturas, las escrituras, la invalidación y el eviction; los links y sus archivos de destino externos se preservan
Posesión
THPDFWeightedCachees propietaria de los valores pasados aPuta menos que un valor se devuelva medianteExtractTHPDFDiskPageCache.Lookupdevuelve un mapa de bits recién asignado del que es propietario quien llama- Los valores de mapa de bits pasados a
THPDFDiskPageCache.Storesiguen siendo propiedad de quien llama
APIs relacionadas
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Rendering Diagnostics and Operation Telemetry