Infrastruktura mezipaměti
HotPDF poskytuje omezenou váženou mezipaměť pro opakovaně použitelné průběžné objekty a trvalou mezipaměť vykreslených stránek používanou při vykreslování načtených dokumentů
Vážená mezipaměť
THPDFWeightedCache v HPDFCache vlastní hodnoty TObject, indexuje je podle AnsiString a vyřazuje nejdéle nepoužité hodnoty, dokud se jejich kombinovaná váha nevejde do MaxBytes
GetaTryGetpovyšují zásah na nejnověji použité a aktualizují statistiky požadavkůPeekaContainsKeyprozkoumávají položky beze změny aktuálnosti ani statistik požadavkůPutpřevezme vlastnictví, nahradí existující klíč na místě a bezpečně přijme stejný objekt znovu, když se změní pouze jeho váhaRemoveuvolní položku, zatímcoExtractpřevede vlastnictví na volajícího- Snížení
MaxBytesvyřadí položky okamžitě aTrimToBudgetzpřístupňuje stejnou operaci konvergence explicitně Hits,Misses,HitRate,Evictions,RejectionsaReplacementszpřístupňují chování mezipaměti, zatímcoResetStatisticsspouští nový interval měření- Kapacita slotů roste geometricky a živé položky zůstávají propojeny v konstantním pořadí aktuálnosti
Klíče obsahu
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Obě funkce vracejí pro stejný obsah stejný šestnáctkový klíč SHA-256 malými písmeny
HPDFCacheKeyOfStream hašuje bez alokace druhého celobajtového pole plné velikosti, čte Seekovatelné proudy od pozice nula a obnovuje jejich původní pozici
Trvalá mezipaměť vykreslených stránek
Nastavte THotPDF.RenderCacheFolder pro povolení diskové úrovně používané po mezipaměti vykreslených stránek v paměti
- Soubory stránek jsou klíčovány podle obsahu dokumentu, indexu stránky počítaného od nuly a DPI
- Aktualizace PNG a indexu jsou atomické a opuštěné dočasné soubory jsou odstraňovány během obnovy
- Čtení stránek občerstvují aktuálnost na úrovni stránky, zatímco limity počtu dokumentů, počtu stránek a bajtů vyřazují nejdéle nepoužitá data
- Snížení nakonfigurovaného limitu konverguje okamžitě namísto čekání na pozdější zápis
GetLoadedFontDecoderhluboce kopíruje spravovaná pole, takže volající nemohou měnit cachovaná mapování ani šířky - Reload dokumentu, mutace grafu, zneplatnění stránky, JSON Patch a každé přiřazení
CMapResourcePathvymaže zachované dekodéry - Získávání dekodéru se serializuje na dokument, aby se jeden font neparsoval dvakrát, ale zámek nedělá souběžnou mutaci dokumentu bezpečnou
GetLoadedFontDecoderCacheInfoexponuje položky, odhadované bajty, rozpočet, zásahy, miny, parsání, vyhození a zneplatnění
Rozdělená cache dekódování načtených obrázků
Každá instance THotPDF koordinuje znovupoužití dekódování načtených obrázků přes 16 nezávisle uzamčených metadatových shardů
- Vyhledávání v cache a přijímání drží jen zvolený shard, zatímco nákladné dekódování filtrů a obrázků běží mimo zámky cache
- Přesný singleflight na klíč zvolí jednoho vlastníka dekódování a donutí duplicitní volající čekat na stejný dokončený výsledek
- Nastavené
ImageCacheMaxBytes, limit počtu položek a limit na položku zůstávají globální napříč všemi shardy - Položky dekódovaných obrázků drží neměnné reference počítané handly, které přežijí vyhození a dovolí rendererům kreslit teplé zásahy bez materializace kopie
TBitmap - Dokončené obrázky se kopírují do instancí
TBitmapvlastněných volajícím, takže volající nemohou měnit zachované pixely cache - Reload dokumentu a zneplatnění cache obrázků vymažou dokončené položky, zatímco aktivní flight objekty si zachovají vlastní reference počítaný život
GetImageDecodeConcurrencyInfohlásí aktivní flighty, aktivní a špičkové dekódování vlastníků, čekání, dokončení a selhání
Cache ICC transformací
HPDFICC sdílí kompletní transformace zdroj-to-sRGB přes thread-safe váženou LRU cache o 64 MiB, včetně proof a výstupních profilů, jsou-li nastaveny
- Klíč SHA-256 pokrývá kompletní obsah zdrojového, proof a výstupního profilu, efektivní záměr vykreslování a nastavení kompenzace černého bodu
HPDFGetICCTransformCacheInfohlásí zásahy, miny, vyhození, odmítnutí, počet položek, aktuální bajty a maximální bajtyHPDFSetICCTransformCacheMaxBytesokamžitě aplikuje nový rozpočet procesu a podle potřeby vyhazuje nejdéle nepoužité transformaceHPDFClearICCTransformCacheuvolní zachované transformace a vynuluje statistiky žádostí, aniž zneplatní rozhraní transformací už držená volajícími
Persistovaná cache subsetů písem
Nastavte THotPDF.FontSubsetCacheFolder pro zapnutí znovupoužitelných výsledků subsetů TrueType a OpenType, zatímco EnableFontSubsetting je aktivní
- Klíč pokrývá původní bajty fontu, přesnou bitmapu použitých glyfů, compact nebo sparse mód a verzi schématu cache
- Běžná cesta fontového úložiště GDI i registrovaný finalizer Unicode fontů znovu používají stejnou cache
- Compact položky PDF/A uchovávají mapu old-to-new GID a nový počet glyfů potřebné pro
CIDToGIDMap - Položky se před použitím validují, poškozené položky se odstraňují a náhrada používá atomický přesun ve stejném adresáři
FontSubsetCacheMaxBytesaplikuje okamžitě a vyhazuje nejdéle nepoužité přesné soubory cache, aniž prochází nesouvisející složkyGetFontSubsetCacheInfohlásí zásahy, miny, zápisy, vyhození, korupci, odmítnutí, selhání zápisu, bajty a souboryClearFontSubsetCacheodstraní z nastavené složky jen položky subsetů písem a opuštěné dočasné položky
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Persistovaná cache vykreslených stránek
Nastavte THotPDF.RenderCacheFolder pro zapnutí diskového stupně používaného po cache vykreslených stránek v paměti
- Soubory stránek se klíčují obsahem dokumentu, indexem stránky od nuly, DPI, efektivní viditelností volitelného obsahu, barevným záměrem a politikou fallbacku
- Změny vrstev a barevného záměru vybírají znovupoužitelné varianty stavu místo zahazování každé cachované bitmapy
- Aktualizace PNG a indexů jsou atomické a opuštěné dočasné soubory se odstraňují při obnově
- Čtení stránek obnovuje recency na úrovni stránek, zatímco limity počtu dokumentů, počtu stránek a bajtů vyhazují nejdéle nepoužitá data
- Zmenšení nakonfigurovaného limitu se projeví okamžitě místo čekání na pozdější zápis
- Poškozené soubory PNG, zastaralé nebo duplicitní řádky indexu, chybějící složky a neindexované složky mezipaměti jsou opravovány automaticky
- Neplatné klíče dokumentů a souřadnice jsou odmítnuty před přístupem k systému souborů
- Propojené složky dokumentů se při obnově, čtení, zápisu, zneplatnění i vyhazování přeskakují; odkazy i jejich externí cílové soubory zůstávají zachované
Vlastnictví
THPDFWeightedCachevlastní hodnoty předané metoděPut, pokud hodnota nebyla vrácena metodouExtractTHPDFDiskPageCache.Lookupvrací nově alokovaný bitmap vlastněný volajícím- Hodnoty bitmap předané metodě
THPDFDiskPageCache.Storezůstávají ve vlastnictví volajícího
Související API
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Diagnostika renderování a telemetrie operací