Infrastruttura di cache
HotPDF fornisce una cache di memoria ponderata e limitata per oggetti intermedi riutilizzabili e una cache persistente delle pagine renderizzate usata dal rendering dei documenti caricati
Cache di memoria ponderata
THPDFWeightedCache in HPDFCache possiede valori TObject , li indicizza per AnsiString ed elimina i valori usati meno di recente finché il peso complessivo non rientra in MaxBytes
GeteTryGetpromuovono un riscontro al più recentemente usato e aggiornano le statistiche delle richiestePeekeContainsKeyispezionano le voci senza modificare la recentezza o le statistiche delle richiestePutacquisisce la proprietà, sostituisce una chiave esistente sul posto e accetta di nuovo in modo sicuro lo stesso oggetto quando cambia solo il suo pesoRemovelibera una voce, mentreExtracttrasferisce la proprietà al chiamante- Ridurre
MaxByteselimina le voci immediatamente, eTrimToBudgetespone la stessa operazione di convergenza in modo esplicito Hits,Misses,HitRate,Evictions,RejectionseReplacementsespongono il comportamento della cache, mentreResetStatisticsavvia un nuovo intervallo di misurazione- La capacità degli slot cresce in modo geometrico e le voci attive rimangono collegate in ordine di recentezza a tempo costante
Chiavi di contenuto
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Entrambe le funzioni restituiscono la stessa chiave esadecimale SHA-256 in minuscolo per lo stesso contenuto
HPDFCacheKeyOfStream esegue l'hash senza allocare un secondo array di byte a dimensione intera, legge gli stream seekable dalla posizione zero e ripristina la loro posizione originale
Cache dei decodificatori dei font caricati
Each THotPDF coordina il riuso della decodifica delle immagini caricate attraverso 16 shard di metadati bloccati indipendentemente
- Lookup e ammissione della cache trattengono solo lo shard selezionato mentre la costosa decodifica di filtri e immagini gira fuori dai lock della cache
- Un singleflight esatto per chiave elegge una decodifica proprietaria e fa attendere ai chiamanti duplicati lo stesso risultato completato
- Estrazione del testo, esportazione SVG, sostituzione del testo caricato e richieste esplicite di decodificatore condividono la stessa cache
GetLoadedFontDecodercopia in profondità gli array gestiti così i chiamanti non possono mutare mapping e larghezze in cache- Il ricaricamento del documento, la mutazione del grafo, l'invalidazione delle pagine, il JSON Patch e ogni
CMapResourcePathassegnazione CMapResourcePath svuota i decodificatori trattenuti - L'acquisizione dei decodificatori è serializzata per documento per evitare il parsing duplicato di uno stesso font, ma il lock non rende sicura la mutazione concorrente del documento
GetLoadedFontDecoderCacheInfoespone voci, byte stimati, budget, hit, miss, parsing, eviction e invalidazioni
Cache di decodifica delle immagini caricate a shard
Ogni istanza di THotPDF conserva i decoder dei font caricati e analizzati con successo in una cache LRU pesata con ambito documento
- Lookup e admission nella cache bloccano solo lo shard selezionato, mentre la costosa decodifica di filtri e immagini viene eseguita fuori dai lock della cache
- Un singleflight esatto per chiave elegge un solo owner per la decodifica e fa attendere i chiamanti duplicati sullo stesso risultato completato
- Il configurato
ImageCacheMaxBytes, il limite di voci e il limite per voce restano globali su tutti gli shard - Le voci delle immagini decodificate trattengono handle immutabili con reference counting che sopravvivono all'eviction e lasciano che i renderer disegnino i warm hit senza materializzare un
TBitmapcopy - Le immagini completate vengono copiate in
TBitmapcosì i chiamanti non possono mutare i pixel della cache trattenuti - Il ricaricamento del documento e l'invalidazione della cache delle immagini svuotano le voci completate mentre gli oggetti di volo attivi conservano la loro durata con reference counting
GetImageDecodeConcurrencyInforiporta voli attivi, decodifiche proprietarie attive e di picco, attese, completamenti e fallimenti
Cache delle trasformazioni ICC
HPDFICC condivide le trasformazioni complete sorgente-sRGB attraverso una cache LRU ponderata thread-safe da 64 MiB, inclusi profili proof e output quando configurati
- La chiave SHA-256 copre il contenuto completo dei profili sorgente, proof e output, l'intento di rendering effettivo e l'impostazione della compensazione del punto nero
HPDFGetICCTransformCacheInforiporta hit, miss, eviction, rifiuti, conteggio voci, byte correnti e byte massimiHPDFSetICCTransformCacheMaxBytesapplica immediatamente un nuovo budget a livello di processo ed espelle le trasformazioni usate meno di recente secondo necessitàHPDFClearICCTransformCacherilascia le trasformazioni trattenute e azzera le statistiche delle richieste senza invalidare le interfacce di trasformazione già trattenute dai chiamanti
Cache persistente dei subset di font
Imposta THotPDF.FontSubsetCacheFolder per abilitare il riutilizzo dei risultati di subset TrueType e OpenType mentre EnableFontSubsetting è attivo
- La chiave copre i byte originali del font, la bitmap esatta dei glifi usati, la modalità compatta o sparsa e la versione dello schema della cache
- Sia il percorso normale del font store GDI sia il finalizer dei font Unicode registrato riusano la stessa cache
- Le voci PDF/A compatte preservano la mappa GID vecchio-a-nuovo e il nuovo conteggio di glifi richiesti da
CIDToGIDMap - Le voci vengono validate prima dell'uso, le voci corrotte vengono rimosse e la sostituzione usa una mossa atomica nella stessa directory
FontSubsetCacheMaxBytessi applica immediatamente ed espelle i file di cache esatti accessi meno di recente senza percorrere cartelle non correlateGetFontSubsetCacheInforiporta hit, miss, scritture, eviction, corruzioni, rifiuti, fallimenti di scrittura, byte e fileClearFontSubsetCacherimuove solo le voci dei subset di font e le voci temporanee abbandonate dalla cartella configurata
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Cache persistente delle pagine renderizzate
Imposta THotPDF.RenderCacheFolder per abilitare il livello su disco usato dopo la cache in memoria delle pagine renderizzate
- I file di pagina sono chiaveati per contenuto del documento, indice di pagina in base zero, DPI, visibilità effettiva dell'optional content, intento di colore e policy di fallback
- I cambi di livello e di intento di colore selezionano varianti di stato riutilizzabili invece di scartare ogni bitmap in cache
- Gli aggiornamenti di PNG e indice sono atomici, e i file temporanei abbandonati vengono rimossi durante il recupero
- Le letture di pagina rinfrescano la recency a livello di pagina, mentre i limiti di conteggio documenti, conteggio pagine e byte espellono i dati usati meno di recente
- Ridurre un limite configurato converge immediatamente invece di attendere una scrittura successiva
- I file PNG corrotti, le righe di indice obsolete o duplicate, le cartelle mancanti e le cartelle cache non indicizzate vengono riparate automaticamente
- Chiavi di documento e coordinate non valide vengono rifiutate prima dell'accesso al file system
- Le cartelle di documento collegate vengono saltate durante recupero, letture, scritture, invalidazione ed espulsione; i link e i loro file target esterni vengono preservati
Ownership
THPDFWeightedCachepossiede i valori passati aPuta meno che un valore non venga restituito daExtractTHPDFDiskPageCache.Lookuprestituisce una bitmap appena allocata di proprietà del chiamante- I valori bitmap passati a
THPDFDiskPageCache.Storerimangono di proprietà del chiamante
API correlate
- Cache persistente dei subset di font
- THotPDF.LoadedFontDecoderCacheMaxBytes
- THotPDF.GetLoadedFontDecoderCacheInfo
- Cache di decodifica delle immagini caricate a shard
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Diagnostica del rendering e telemetria delle operazioni