Predpomnilniška infrastruktura
HotPDF ponuja omejen oteženi pomnilniški predpomnilnik za vnovično uporabne vmesne predmete in trajni predpomnilnik upodobljenih strani, ki ga uporablja upodabljanje naloženih dokumentov
Oteženi pomnilniški predpomnilnik
Razred THPDFWeightedCache v HPDFCache je lastnik vrednosti TObject, jih indeksira po AnsiString in izloča najdlje časa neuporabljene vrednosti, dokler njihova skupna teža ne ustreza MaxBytes
GetinTryGetpovišata zadetek med najbolj nedavno uporabljene in posodobita statistiko zahtevkovPeekinContainsKeypregledata vnose, ne da bi spremenila nedavnost ali statistiko zahtevkovPutprevzame lastništvo, nadomesti obstoječi ključ na mestu in varno znova sprejme isti predmet, ko se spremeni le njegova težaRemovesprosti vnos,Extractpa prenese lastništvo na klicatelja- Zmanjšanje
MaxBytestakoj izloči vnose,TrimToBudgetpa izpostavi isto operacijo konvergence izrecno Hits,Misses,HitRate,Evictions,RejectionsinReplacementsizpostavljajo obnašanje predpomnilnika,ResetStatisticspa začne nov interval meritve- Zmogljivost reže narašča geometrijsko, živi vnosi pa ostanejo povezani v vrstni red nedavnosti s konstantnim časom
Ključi vsebine
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Obe funkciji vrneta isti ključ v obliki malega šestnajstiškega izpisa SHA-256 za isto vsebino
HPDFCacheKeyOfStream razprši brez dodeljevanja drugega polnega polja bajtov, bere tokove z iskanjem od ničle in povrne njihov prvotni položaj
Trajni predpomnilnik upodobljenih strani
Nastavite THotPDF.RenderCacheFolder, da omogočite diskovni nivo, ki se uporablja za pomnilniškim predpomnilnikom upodobljenih strani
- Datoteke strani so ključene po vsebini dokumenta, ničelnem indeksu strani in DPI
- Posodobitve PNG in indeksa so atomske, opuščene začasne datoteke pa se med obnovitvijo odstranijo
- Branja strani osvežijo nedavnost na ravni strani, število dokumentov, število strani in omejitve bajtov pa izločijo najdlje časa neuporabljene podatke
- Zmanjšanje nastavljene omejitve takoj konvergira namesto da bi čakalo na poznejši zapis
GetLoadedFontDecoderdeep-copies managed arrays so callers cannot mutate cached mappings or widths - Document reload, graph mutation, page invalidation, JSON Patch, and every
CMapResourcePathassignment clear retained decoders - Decoder acquisition is serialised per document to avoid duplicate parsing of one font, but the lock does not make concurrent document mutation safe
GetLoadedFontDecoderCacheInfoexposes entries, estimated bytes, budget, hits, misses, parses, evictions, and invalidations
Sharded loaded-image decode cache
Each THotPDF instance coordinates loaded-image decode reuse through 16 independently locked metadata shards
- Cache lookup and admission hold only the selected shard while expensive filter and image decoding runs outside cache locks
- An exact per-key singleflight elects one owner decode and makes duplicate callers wait for the same completed result
- The configured
ImageCacheMaxBytes, entry-count limit, and per-entry limit remain global across all shards - Decoded-image entries hold immutable reference-counted handles that survive eviction and let renderers draw warm hits without materialising a
TBitmapcopy - Completed images are copied into caller-owned
TBitmapinstances so callers cannot mutate retained cache pixels - Document reload and image-cache invalidation clear completed entries while active flight objects retain their own reference-counted lifetime
GetImageDecodeConcurrencyInforeports active flights, active and peak owner decodes, waits, completions, and failures
ICC transform cache
HPDFICC shares complete source-to-sRGB transforms through a thread-safe 64 MiB weighted LRU cache, including proof and output profiles when configured
- The SHA-256 key covers the complete source, proof and output profile contents, effective rendering intent and black-point compensation setting
HPDFGetICCTransformCacheInforeports hits, misses, evictions, rejections, entry count, current bytes and maximum bytesHPDFSetICCTransformCacheMaxBytesapplies a new process-wide budget immediately and evicts least recently used transforms as neededHPDFClearICCTransformCachereleases retained transforms and resets request statistics without invalidating transform interfaces already held by callers
Persistent font-subset cache
Set THotPDF.FontSubsetCacheFolder to enable reusable TrueType and OpenType subset results while EnableFontSubsetting is active
- The key covers the original font bytes, exact used-glyph bitmap, compact or sparse mode, and cache schema version
- Both the normal GDI font-store path and the registered Unicode-font finalizer reuse the same cache
- Compact PDF/A entries preserve the old-to-new GID map and new glyph count needed by
CIDToGIDMap - Entries are validated before use, corrupt entries are removed, and replacement uses an atomic same-directory move
FontSubsetCacheMaxBytesapplies immediately and evicts the least recently accessed exact cache files without traversing unrelated foldersGetFontSubsetCacheInforeports hits, misses, writes, evictions, corruption, rejections, write failures, bytes, and filesClearFontSubsetCacheremoves only font-subset entries and abandoned temporary entries from the configured folder
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Trajni predpomnilnik upodobljenih strani
Nastavite THotPDF.RenderCacheFolder, da omogočite diskovno raven, uporabljeno za predpomnilnikom upodobljenih strani v pomnilniku
- Datoteke strani so ključane po vsebini dokumenta, indeksu strani z ničelno osnovo, DPI, dejanski vidljivosti neobvezne vsebine, namenu barv in rezervni politiki
- Spremembe plasti in namena barv izberejo ponovno uporabne stanja variant, namesto da zavržejo vsako predpomnjeno bitno sliko
- Posodobitve PNG in indeksa so atomske, opuščene začasne datoteke pa se odstranijo med obnavljanjem
- Branja strani osvežijo nedavnost na ravni strani, omejitve števila dokumentov, strani in bajtov pa izrinejo najmanj nazadnje uporabljene podatke
- Zmanjšanje nastavljene omejitve se konvergira takoj, namesto da bi čakalo na poznejši zapis
- Pokvarjene datoteke PNG, zastarele ali podvojene vrstice indeksa, manjkajoče mape in neindeksirane mape predpomnilnika se samodejno popravijo
- Neveljavni ključi dokumentov in koordinate se zavrnejo pred dostopom do datotečnega sistema
- Povezane mape dokumentov se med obnavljanjem, branji, pisanji, razveljavitvami in izrinjanjem preskočijo; povezave in njihove zunanje ciljne datoteke ostanejo ohranjene
Lastništvo
THPDFWeightedCacheje lastnik vrednosti, posredovanihPut, razen če je bila vrednost povrnjena zExtractTHPDFDiskPageCache.Lookupvrne na novo dodeljeno bitno sliko v lasti klicatelja- Vrednosti bitne slike, posredovane
THPDFDiskPageCache.Store, ostanejo v lasti klicatelja
Povezani API-ji
- Trajni predpomnilnik podmnožic pisav
- THotPDF.LoadedFontDecoderCacheMaxBytes
- THotPDF.GetLoadedFontDecoderCacheInfo
- Razdeljeni predpomnilnik dekodiranja naloženih slik
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Diagnostika upodabljanja in telemetrija operacij