Cache Infrastructure
HotPDF tillhandahåller minnescache med övre gräns plus beständiga cachar för återanvändbara typsnittsdelmängder och renderade sidor
Viktad minnes-cache
THPDFWeightedCache i HPDFCache äger TObject -värden, indexerar dem med AnsiString, och kastar ut de minst nyligen använda värdena tills deras sammanlagda vikt ryms i MaxBytes
GetochTryGetlyfter en träff till senast använd och uppdaterar förfrågningsstatistikenPeekochContainsKeygranskar poster utan att ändra senast-använd-ordning eller förfrågningsstatistikPuttar ägandeskap, ersätter en befintlig nyckel på plats och accepterar tryggt samma objekt igen när bara dess vikt ändratsRemovefrigör en post, medanExtractöverför ägandeskapet till anroparen- Att sänka
MaxByteskastar ut poster omedelbart, ochTrimToBudgetexponerar samma konvergensoperation explicit Hits,Misses,HitRate,Evictions,RejectionsochReplacementsexponerar cachebeteende, medanResetStatisticsstartar ett nytt mätintervall- Slotkapaciteten växer geometriskt och levande poster förblir länkade i konstant tid i senast-använd-ordning
Innehållsnycklar
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Båda funktionerna returnerar samma hexadecimala SHA-256-nyckel med gemener för samma innehåll
HPDFCacheKeyOfStream hashar utan att allokera en andra bytearray i full storlek, läser sökbara strömmar från position noll och återställer deras ursprungliga position
Decoder-cache för laddade typsnitt
Varje THotPDF instans behåller framgångsrikt parsade decodrar för laddade typsnitt i en dokumentomfattande viktad LRU-cache
- Standardbudgeten är 32 MiB med en hård gräns på 128 poster, och en budget på noll byte stänger av retentionen
- Delade indirekta typsnittsordlistor återanvänder en enda parsad kärna över sidor även när sidor använder olika resursnamn
- Textextrahering, SVG-export, ersättning av laddad text och explicita decodförfrågningar delar samma cache
GetLoadedFontDecodergör djupa kopior av hanterade arrayer så att anropare inte kan mutera cachade mappningar eller bredder- Dokumentomladdning, grafmutation, sidogiltigförklaring, JSON Patch och varje
CMapResourcePath-tilldelning rensar behållna decodrar - Decoderhämtning serieras per dokument för att undvika dubbel parsing av ett typsnitt, men låset gör inte samtidig dokumentmutation säker
GetLoadedFontDecoderCacheInfoexponerar poster, uppskattade byte, budget, träffar, missar, parsningar, utkastningar och ogiltigförklaringar
Shardad decoder-cache för laddade bilder
Varje THotPDF instans samordnar återanvändning av dekodning av laddade bilder via 16 oberoende låsta metadatashards
- Cacheuppslag och antagning låser bara den valda sharden medan dyr filter- och bilddekodning körs utanför cache-låsen
- En exakt per-nyckel-singleflight utser en ägarddekodning och låter duplicerade anropare vänta på samma färdiga resultat
- Den konfigurerade
ImageCacheMaxBytes, postantsgränsen och gränsen per post förblir globala över alla shards - Poster för dekodade bilder håller oföränderliga referensräknade handtag som överlever utkastning och låter renderare rita varma träffar utan att materialisera en
TBitmapkopia - Färdiga bilder kopieras till anroparägda
TBitmap-instanser så att anropare inte kan mutera behållna cache-pixlar - Dokumentomladdning och ogiltigförklaring av bildcachen rensar färdiga poster medan aktiva flight-objekt behåller sin egen referensräknade livstid
GetImageDecodeConcurrencyInforapporterar aktiva flights, aktiva och topp-ägarddekodningar, väntningar, fullföljningar och fel
ICC-transformcache
HPDFICC delar kompletta källa-till-sRGB-transformer via en trådsäker viktad LRU-cache på 64 MiB, inklusive korrektur- och utdataprofiler när sådana är konfigurerade
- SHA-256-nyckeln täcker fullständigt käll-, korrektur- och utdataprofilinnehåll, effektiv rendering intent och inställningen för svartpunktskompensering
HPDFGetICCTransformCacheInforapporterar träffar, missar, utkastningar, avvisningar, postantal, aktuella byte och maximala byteHPDFSetICCTransformCacheMaxBytestillämpar en ny budget för hela processen omedelbart och kastar vid behov ut minst nyligen använda transformerHPDFClearICCTransformCachesläpper behållna transformer och nollställer förfrågningsstatistiken utan att ogiltigförklara transformgränssnitt som anropare redan håller
Beständig typsnittsdelmängds-cache
Ställ in THotPDF.FontSubsetCacheFolder för att aktivera återanvändbara TrueType- och OpenType-delmängdsresultat medan EnableFontSubsetting är aktiv
- Nyckeln täcker de ursprungliga typsnittsbytena, en exakt bitkarta över använda glyfer, kompakt- eller sparse-läge och cacheschemats version
- Både den normala GDI-sökvägen för fontlagring och den registrerade Unicode-typsnittsfinalizeren återanvänder samma cache
- Kompakta PDF/A-poster bevarar gammal-till-ny-GID-mappningen och det nya glyfantal som
CIDToGIDMap - Poster valideras före användning, skadade poster tas bort och ersättning använder en atomär flytt inom samma katalog
FontSubsetCacheMaxBytestillämpas omedelbart och kastar ut de minst nyligen åtkomna exakta cachefilerna utan att gå igenom orelaterade mapparGetFontSubsetCacheInforapporterar träffar, missar, skrivningar, utkastningar, skador, avvisningar, skrivfel, byte och filerClearFontSubsetCachetar bara bort typsnittsdelmängdsposter och övergivna temporära poster från den konfigurerade mappen
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Beständig cache för renderade sidor
Ställ in THotPDF.RenderCacheFolder för att aktivera disknivån som används efter cachen för renderade sidor i minnet
- Sidfiler nycklas av dokumentinnehåll, nollbaserat sidindex, DPI, effektiv synlighet för valfritt innehåll, färginriktning och reservpolicy
- Ändringar av lager och färginriktning väljer återanvändbara tillståndsvarianter i stället för att kasta varje cachad bitmapp
- PNG- och indexuppdateringar är atomära, och övergivna temporärfiler tas bort vid återställning
- Sidläsningar uppdaterar senast-använd-data på sidnivå, medan dokumentantal, sidantal och bytegränser kastar ut minst nyligen använda data
- Att sänka en konfigurerad gräns konvergerar omedelbart i stället för att vänta på en senare skrivning
- Skadade PNG-filer, inaktuella eller duplicerade indexrader, saknade mappar och oindexerade cachemappar repareras automatiskt
- Ogiltiga dokumentnycklar och koordinater avvisas före filsystemåtkomst
- Länkade dokumentmappar hoppas över vid återställning, läsning, skrivning, ogiltigförklaring och utkastning; länkar och deras externa målfiler bevaras
Ägandeskap
THPDFWeightedCacheäger värden som skickas tillPutsåvida inte ett värde returneras avExtractTHPDFDiskPageCache.Lookupreturnerar en ny allokerad bitmapp som ägs av anroparen- Bitmappsvärden som skickas till
THPDFDiskPageCache.Storeförblir ägda av anroparen
Relaterade API:er
- 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