Infraestructura de caché
HotPDF proporciona una caché de memoria ponderada y acotada para objetos intermedios reutilizables y una caché persistente de páginas renderizadas utilizada en el renderizado de documentos cargados
Caché de memoria ponderada
THPDFWeightedCache en HPDFCache es propietaria de valores TObject, los indexa por AnsiString y expulsa 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 reciente ni las estadísticas de solicitudesPuttoma posesión, sustituye una clave existente en su sitio y acepta de forma segura el mismo objeto de nuevo cuando solo cambia su pesoRemovelibera una entrada, mientras queExtracttransfiere la posesión al llamador- Reducir
MaxBytesexpulsa entradas inmediatamente, yTrimToBudgetexpone de forma explícita la misma operación de convergencia Hits,Misses,HitRate,Evictions,RejectionsyReplacementsexponen el comportamiento de la caché, mientras queResetStatisticsinicia un nuevo intervalo de medición- La capacidad de los huecos crece de forma geométrica y las entradas activas permanecen enlazadas en orden de reciente en 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 aplica el hash sin asignar una segunda matriz de bytes de tamaño completo, lee los flujos posicionables desde la posición cero y restaura su posición original
Caché de decodificadores de fuentes cargadas
Cada instancia THotPDF retiene los decodificadores de fuentes cargadas parseados con éxito en una caché LRU ponderada con ámbito de documento
- El presupuesto por defecto es de 32 MiB con un límite duro de 128 entradas, y un presupuesto de cero bytes deshabilita la retención
- Los diccionarios de fuente indirectos compartidos reutilizan un mismo core parseado entre páginas incluso cuando las páginas usan nombres de recurso distintos
- La extracción de texto, la exportación SVG, la sustitución de texto cargado y las peticiones explícitas de decodificador comparten la misma caché
GetLoadedFontDecodercopia en profundidad los arrays gestionados para que los llamadores no puedan mutar mapeos ni anchuras cacheados- La recarga del documento, la mutación del grafo, la invalidación de páginas, JSON Patch y cada asignación de
CMapResourcePathlimpian los decodificadores retenidos - La adquisición de decodificadores se serializa por documento para evitar el parseo duplicado de una misma fuente, pero el lock no hace segura la mutación concurrente del documento
GetLoadedFontDecoderCacheInfoexpone entradas, bytes estimados, presupuesto, aciertos, fallos, parseos, expulsiones e invalidaciones
Caché de decodificación de imágenes cargadas compartimentada
Cada instancia THotPDF coordina la reutilización de decodificaciones de imágenes cargadas a través de 16 shards de metadatos con locks independientes
- La búsqueda y admisión en caché retienen solo la partición seleccionada mientras la decodificación costosa de filtros e imágenes se ejecuta fuera de los bloqueos de caché
- Un singleflight exacto por clave elige un decodificador propietario y hace que los llamadores duplicados esperen el mismo resultado completado
- El
ImageCacheMaxBytesconfigurado, el límite de entradas y el límite por entrada siguen siendo globales para todos los shards - Las entradas de imágenes decodificadas contienen manejadores inmutables con recuento de referencias que sobreviven a las expulsiones y permiten a los renderers dibujar aciertos calientes sin materializar una copia
TBitmap - Las imágenes completadas se copian en instancias
TBitmappropiedad del llamador para que no pueda mutar los píxeles retenidos en caché - La recarga del documento y la invalidación de la caché de imágenes limpian las entradas completadas mientras los objetos en vuelo activos conservan su propio ciclo de vida con recuento de referencias
GetImageDecodeConcurrencyInfoinforma de vuelos activos, decodificaciones propietarias activas y pico, esperas, terminaciones y fallos
Caché de transformadas ICC
HPDFICC comparte transformaciones completas de origen a sRGB a través de una caché LRU ponderada de 64 MiB segura para hilos, incluidos perfiles de prueba y de salida cuando están configurados
- La clave SHA-256 cubre el contenido completo del fuente y de los perfiles de prueba y de salida, la intención de renderizado efectiva 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 menos recientemente usadas según sea necesarioHPDFClearICCTransformCachelibera las transformaciones retenidas y restablece las estadísticas de peticiones sin invalidar las interfaces de transformación que los llamadores ya sostienen
Caché persistente de subconjuntos de fuentes
Establezca THotPDF.FontSubsetCacheFolder para habilitar resultados de subsetting 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 caché
- Tanto la ruta normal del almacén de fuentes GDI como el finalizador de fuentes Unicode registrado reutilizan la misma caché
- Las entradas compactas PDF/A conservan el mapa GID antiguo-a-nuevo y el recuento de glifos nuevo que necesita
CIDToGIDMap - Las entradas se validan antes de usarse, las corruptas se eliminan, y el reemplazo usa un movimiento atómico en el mismo directorio
FontSubsetCacheMaxBytesse aplica de inmediato y expulsa los archivos de caché exactos menos recientemente accedidos sin recorrer carpetas no relacionadasGetFontSubsetCacheInfoinforma de aciertos, fallos, escrituras, expulsiones, corrupción, rechazos, fallos de escritura, bytes y archivosClearFontSubsetCacheelimina solo las entradas de subsetting 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;
Caché persistente de páginas renderizadas
Establezca THotPDF.RenderCacheFolder para habilitar el nivel de disco usado después de la caché en memoria de páginas renderizadas
- Los archivos de página se indexan por contenido del documento, índice de página basado en cero, DPI, visibilidad efectiva de contenido opcional, intención de color y política de respaldo
- Los cambios de capa e intención de color seleccionan variantes de estado reutilizables en lugar de descartar cada bitmap en caché
- Las actualizaciones de PNG e índice son atómicas, y los archivos temporales abandonados se eliminan durante la recuperación
- Las lecturas de página refrescan la recencia a nivel de página, mientras que los límites de recuento de documentos, de páginas y de bytes expulsan los datos menos recientemente usados
- Reducir un límite configurado converge de inmediato en lugar de esperar a una escritura posterior
- Los PNG corruptos, las filas de índice obsoletas o duplicadas, las carpetas ausentes y las carpetas de caché sin indexar se reparan automáticamente
- Las claves y coordenadas de documento inválidas se rechazan antes de acceder al sistema de archivos
- Las carpetas de documento enlazadas se omiten durante la recuperación, las lecturas, las escrituras, la invalidación y la expulsión; los enlaces y sus archivos de destino externos se preservan
Propiedad
THPDFWeightedCachees propietario de los valores pasados aPutsalvo que un valor sea devuelto porExtractTHPDFDiskPageCache.Lookupdevuelve un bitmap recién asignado propiedad del llamador- Los valores de bitmap pasados a
THPDFDiskPageCache.Storesiguen siendo propiedad del llamador
APIs relacionadas
- Persistent Font-Subset Cache
- THotPDF.LoadedFontDecoderCacheMaxBytes
- THotPDF.GetLoadedFontDecoderCacheInfo
- Sharded Loaded-Image Decode Cache
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Rendering Diagnostics and Operation Telemetry