Cache Infrastructure
HotPDF poskytuje ohraničené cachovanie v pamäti plus perzistentné vyrovnávacie pamäti pre opakovane použiteľné podmnožiny fontov a vyrenderované strany
Váhová pamäťová vyrovnávacia pamäť
THPDFWeightedCache v HPDFCache vlastní hodnoty TObject, indexuje ich podľa AnsiString a vyháňa najdlhšie nepoužité hodnoty, kým ich kombinovaná váha sa nezmestí do MaxBytes
GetaTryGetpovýšia zásah na najnovšie použitý a aktualizujú štatistiky požiadaviekPeekaContainsKeyskúmajú položky bez zmeny čerstvosti alebo štatistík požiadaviekPutprevezme vlastníctvo, nahrádza existujúci kľúč na mieste a bezpečne znovu prijme ten istý objekt, keď sa mení len jeho váhaRemoveuvoľní položku, zatiaľ čoExtractprevedie vlastníctvo na volajúceho- Zníženie
MaxBytesokamžite vyháňa položky aTrimToBudgetsprístupňuje tú istú konvergenčnú operáciu explicitne Hits,Misses,HitRate,Evictions,RejectionsaReplacementssprístupňujú správanie cache, zatiaľ čoResetStatisticszačína nový interval merania- Kapacita slotov rastie geometricky a živé položky zostávajú späté v poradí čerstvosti s konštantným časom
Kľúče obsahu
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Obidve funkcie vracajú pre ten istý obsah ten istý malými písmenami zapísaný hexadecimálny kľúč SHA-256
HPDFCacheKeyOfStream hašuje bez alokácie druhého poľa bajtov v plnej veľkosti, číta vyhľadávateľné streamy od pozície nula a obnoví ich pôvodnú pozíciu
Cache dekodérov načítaných fontov
Každá inštancia THotPDF uchováva úspešne parsované dekodéry načítaných fontov v váženej LRU cache s rozsahom dokumentu
- Predvolený rozpočet je 32 MiB s tvrdým limitom 128 položiek a nulový bajtový rozpočet vypína uchovávanie
- Zdieľané nepriame slovníky fontov znovu používajú jedno parsované jadro naprieč stránkami, aj keď stránky používajú odlišné názvy zdrojov
- Extrakcia textu, SVG export, náhrada textu v načítanom dokumente a explicitné požiadavky dekodérov zdieľajú tú istú cache
GetLoadedFontDecoderrobí hĺbkovú kópiu spravovaných polí, takže volajúci nemôžu mutovať cacheované mapovania ani šírky- Opätovné načítanie dokumentu, mutácia grafu, zneplatnenie strany, JSON Patch a každé priradenie
CMapResourcePathvymažú držané dekodéry - Získavanie dekodérov sa serializuje na dokument, aby sa zabránilo duplicitnému parsovaniu jedného fontu, ale zámok robí bezpečným ani súbežnú mutáciu dokumentu
GetLoadedFontDecoderCacheInfosprístupňuje položky, odhadované bajty, rozpočet, zásahy, uniky, parsovania, evikcie a zneplatnenia
Shardovaná cache dekódovania načítaných obrázkov
Každá inštancia THotPDF koordinuje znovupoužitie dekódovania načítaných obrázkov cez 16 nezávisle uzamknutých shardov metaúdajov
- Vyhľadávanie a prijímanie cache drží len zvolený shard, zatiaľ čo drahé dekódovanie filtrov a obrázkov beží mimo zámkov cache
- Presný singleflight na kľúč vyberie jedno vlastnícke dekódovanie a prinúti duplicitných volajúcich čakať na ten istý dokončený výsledok
- Nastavený
ImageCacheMaxBytes, limit počtu položiek a limit na položku zostávajú globálne naprieč všetkými shardmi - Položky dekódovaných obrázkov držia nemenné handly s referenčným počítaním, ktoré prežijú evikciu a dovoľujú rendererom kresliť zásahy do cache bez materializácie kópie
TBitmap - Dokončené obrázky sa kopírujú do inštancií
TBitmapvo vlastníctve volajúceho, takže volajúci nemôžu mutovať držané pixele cache - Opätovné načítanie dokumentu a zneplatnenie cache obrázkov vyčistí dokončené položky, zatiaľ čo aktívne objekty letov si zachovávajú vlastný životný cyklus s referenčným počítaním
GetImageDecodeConcurrencyInfohlási aktívne lety, aktívne a špičkové dekódovania vlastníkov, čakania, dokončenia a zlyhania
Cache ICC transformácií
HPDFICC zdieľa kompletné transformácie zdroj-sRGB cez bezpečnú pre vlákna váženú LRU cache 64 MiB, vrátane proof a výstupných profilov, keď sú nastavené
- Kľúč SHA-256 pokrýva kompletný zdroj, obsah proof a výstupných profilov, efektívny rendering intent a nastavenie kompenzácie čierneho bodu
HPDFGetICCTransformCacheInfohlási zásahy, uniky, evikcie, zamietnutia, počet položiek, aktuálne a maximálne bajtyHPDFSetICCTransformCacheMaxBytesaplikuje nový rozpočet celej procesu okamžite a podľa potreby vyháňa najdlhšie nepoužité transformácieHPDFClearICCTransformCacheuvoľní držané transformácie a resetuje štatistiky požiadaviek bez zneplatnenia transformných rozhraní už držaných volajúcimi
Perzistentná cache podmnožín fontov
THotPDF.FontSubsetCacheFolder nastavte na zapnutie opakovane použiteľných výsledkov podmnožín TrueType a OpenType, kým je aktívne EnableFontSubsetting
- Kľúč pokrýva pôvodné bajty fontu, presný bitmap použitých glyfov, kompaktný alebo riedky režim a verziu schémy cache
- Bežná cesta úložiska fontov GDI aj zaregistrovaný finalizér Unicode fontov znovu používajú tú istú cache
- Kompaktné položky PDF/A zachovávajú mapu GID starý-na-nový a nový počet glyfov potrebné pre
CIDToGIDMap - Položky sa validujú pred použitím, poškodené položky sa odstránia a náhrada používa atomický presun v tom istom adresári
FontSubsetCacheMaxBytessa aplikuje okamžite a vyháňa najdlhšie neprístupné presné cache súbory bez prechádzania nesúvisiacich zložiekGetFontSubsetCacheInfohlási zásahy, uniky, zápisy, evikcie, poškodenia, zamietnutia, zlyhania zápisov, bajty a súboryClearFontSubsetCacheodstraňuje z nastavenej zložky len položky podmnožín fontov a opustené dočasné položky
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Perzistentná cache vyrenderovaných stránok
THotPDF.RenderCacheFolder nastavte na zapnutie diskovej vrstvy používanej za vyrovnávacou pamäťou vyrenderovaných stránok v pamäti
- Súbory stránok sú kľúčované obsahom dokumentu, nulovým indexom stránky, DPI, efektívnou viditeľnosťou optional content, farebným intentom a politikou fallbacku
- Zmeny vrstiev a farebného intentu vyberajú opakovane použiteľné varianty stavov namiesto zahadzovania každého cacheovaného bitmapu
- Aktualizácie PNG a indexu sú atomické a opustené dočasné súbory sa odstraňujú počas obnovy
- Čítania stránok obnovujú čerstvosť na úrovni stránok, zatiaľ čo limity počtu dokumentov, počtu strán a bajtov vyháňajú najdlhšie nepoužité dáta
- Zníženie nastaveného limitu sa okamžite skonverguje namiesto čakania na neskorší zápis
- Poškodené súbory PNG, zastaralé alebo duplicitné riadky indexu, chýbajúce zložky a neindexované cache zložky sa opravujú automaticky
- Neplatné kľúče dokumentu a súradnice sa odmietnu skôr, než dôjde k prístupu k súborovému systému
- Prepojené priečinky dokumentov sa vynechávajú počas obnovy, čítania, zápisu, invalidácie aj evikcie; odkazy a ich externé cieľové súbory zostávajú zachované
Vlastníctvo
THPDFWeightedCachevlastní hodnoty odovzdané doPut, pokiaľ hodnotu nevrátiExtractTHPDFDiskPageCache.Lookupvracia novo alokovaný bitmap vo vlastníctve volajúceho- Hodnoty bitmapov odovzdané do
THPDFDiskPageCache.Storezostávajú vo vlastníctve volajúceho
Súvisiace API
- 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