Cache Infrastructure
HotPDF pateikia apribotą atmintinės podėliavimą ir nuolatinius podėlius pakartotinai naudojamiems šriftų poaibiams bei atvaizduotiems puslapiams
Pasvertasis atmintinės podėlis
THPDFWeightedCache (HPDFCache) valdo TObject reikšmes, indeksuoja jas pagal AnsiString ir išmeta seniausiai naudotas reikšmes, kol jų bendrasis svoris telpa į MaxBytes
GetirTryGetpakelia pataikymą į seniausiai naudotus ir atnaujina užklausimų statistikąPeekirContainsKeyapžiūri įrašus nekeisdami naujumo arba užklausimų statistikosPutperima valdymą, pakeičia esamą raktą vietoje ir saugiai priima tą patį objektą dar kartą, kai pasikeičia tik jo svorisRemoveatlaisvina įrašą, oExtractnuosavybę perkelia kvietėjuiMaxBytesmažinimas įrašus išrodo tučtuojau, oTrimToBudgettą pačią susilyginimo operaciją atskleidžia aiškiaiHits,Misses,HitRate,Evictions,RejectionsirReplacementsatskleidžia podėlio elgseną, oResetStatisticspradeda naują matavimo intervalą- Vietų talpa auga geometriškai, o gyvieji įrašai lieka susieti pastovaus laiko naujumo tvarka
Turinio raktai
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Abi funkcijos tam pačiam turiniui grąžina tą patį mažosiomis raidėmis SHA-256 šešioliktainį raktą
HPDFCacheKeyOfStream maiša neskyrdama antrosios pilno dydžio baitų masyvo, pozicionuojamuosius srautus skaito nuo nulinės pozicijos ir atstato jų pirminę poziciją
Įkeltųjų šriftų dekoderių podėlis
Kiekvienas THotPDF egzempliorius sėkmingai išanalizuotus įkeltųjų šriftų dekoderius laiko dokumento apimties sveriamajame LRU podėlyje
- Numatytasis biudžetas yra 32 MiB su kietąja 128 įrašų riba, o nulinis baitų biudžetas išjungia laikymą
- Bendrieji netiesioginiai šriftų žodynai puslapiuose naudoja vieną išanalizuotąją branduolį, net kai puslapiai naudoja skirtingus išteklių vardus
- Teksto ištrauka, SVG eksportas, įkeltojo teksto pakeitimas ir aiškios dekoderių užklausos naudoja tą patį podėlį
GetLoadedFontDecodervaldomuosius masyvus kopijuoja iki galo, tad kvietėjai negali keisti podėliuotųjų atvaizdų ar pločių- Dokumento perkėlimas, grafo keitimas, puslapių panaikinimas, JSON Patch ir kiekvienas
CMapResourcePathpriskyrimas išvalo laikomuosius dekoderius - Dekoderių įgijimas serijalizuojamas kiekvienam dokumentui, kad vienas šriftas nebūtų analizuojamas dukart, bet raktas lygiagretaus dokumento keitimo nesaugo
GetLoadedFontDecoderCacheInfoatskleidžia įrašus, įvertintuosius baitus, biudžetą, atitikimus, nepatikimus, analizės, išrodymus ir panaikinimus
Perskaidytasis įkeltųjų vaizdų iškodavimo podėlis
Kiekvienas THotPDF egzempliorius įkeltųjų vaizdų iškodavimo pakartotinį naudojimą koordinuoja per 16 atskirai užrakinamų metaduomenų skaidinių
- Podėlio paieška ir priėmimas laiko tik pasirinktąjį skaidinį, o brangus filtrų ir vaizdų iškodavimas vyksta už podėlio raktų ribų
- Tikrusis kiekvieno rakto singleflight išrenka vieną savininko iškodavimą ir verčia dubliuotuosius kvietėjus laukti to paties užbaigto rezultato
- Nustatytasis
ImageCacheMaxBytes, įrašų skaičiaus riba ir atskiro įrašo riba lieka bendrieji visiems skaidiniams - Iškoduotųjų vaizdų įrašai laiko nekeičiamąsias suskaičiuotųjų nuorodų rankenas, kurios išgyvena išrodymą ir leidžia atvaizduoklėms piešti šiltuosius atitikimus negaminant
TBitmapkopijos - Užbaigtieji vaizdai nukopijuojami į kvietėjo valdomus
TBitmapegzempliorius, tad kvietėjai negali keisti podėlyje laikomų taškų - Dokumento perkėlimas ir vaizdų podėlio panaikinimas išvalo užbaigtuosius įrašus, o aktyvieji atakos objektai išlaiko savąjį suskaičiuotųjų nuorodų gyvavimą
GetImageDecodeConcurrencyInfopraneša aktyviąsias ataka (flight), aktyviąsias ir didžiausiąsias savininko iškodavimo atakas, laukimus, užbaigimus ir nesėkmes
ICC transformacijų podėlis
HPDFICC visąsias šaltinio-į-sRGB transformacijas dalijasi per gijoms saugų 64 MiB sveriamąjį LRU podėlį, įskaitant spaudinio ir išvesties profilius, kai jie nustatyti
- SHA-256 raktą sudaro visas šaltinio, spaudinio ir išvesties profilių turinys, faktinė atvaizdavimo intencija ir juodojo taško kompensacijos nustatymas
HPDFGetICCTransformCacheInfopraneša atitikimus, nepatikimus, išrodymus, atmetimus, įrašų skaičių, dabartinius ir didžiausius baitusHPDFSetICCTransformCacheMaxBytesnaująjį viso proceso biudžetą taiko tučtuojau ir, kaip reikia, išrodo seniausiai naudotas transformacijasHPDFClearICCTransformCacheatlaisvina laikomąsias transformacijas ir atstato užklausų statistiką, nepanaikindama kvietėjų jau valdomų transformacijų sąsajų
Nuolatinis šriftų poaibių podėlis
Nustatykite THotPDF.FontSubsetCacheFolder, kad veikiant EnableFontSubsetting būtų galima pakartotinai naudoti TrueType ir OpenType poaibių rezultatus
- Raktą sudaro pirminieji šriftų baitai, tikrioji naudotųjų glifų bitmap, kompaktinė arba reta veiksena ir podėlio schemos versija
- Ir įprastasis GDI šriftų saugyklos kelias, ir registruotasis Unicode šriftų užbaigiklis naudoja tą patį podėlį
- Kompaktiškieji PDF/A įrašai išlaiko senojo-į-naująjį GID atvaizdą ir naująjį glifų skaičių, kurių reikia
CIDToGIDMap - Įrašai patikrinami prieš naudojimą, sugedusieji pašalinami, o pakeitimas naudoja atominį perkėlimą tame pačiame aplanke
FontSubsetCacheMaxBytestaikoma tučtuojau ir išrodo seniausiai liečtuosius tikruosius podėlio failus, neapėidama nesusijusių aplankųGetFontSubsetCacheInfopraneša atitikimus, nepatikimus, įrašymus, išrodymus, sugedimus, atmetimus, įrašymo nesėkmes, baitus ir failusClearFontSubsetCacheiš nustatytosios aplanko šalina tik šriftų poaibių įrašus ir apleistuosius laikinuosius įrašus
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Nuolatinis atvaizduotų puslapių podėlis
Nustatykite THotPDF.RenderCacheFolder, kad įsijungtų diskas lygmuo, naudojamas po atmintyje esančio atvaizduotų puslapių podėlio
- Puslapių failų raktą sudaro dokumento turinys, nuliu pagrįstas puslapio indeksas, DPI, faktinis pasirinktojo turinio matomumas, spalvų intencija ir atsarginė politika
- Sluoksnių ir spalvų intencijos keitimai atrenka pakartotinai naudojamąsias būsenų atmainas, vietoj to, kad išmestų kiekvieną podėliuotąją bitmap
- PNG ir indeksų atnaujinimai yra atominiai, o apleistieji laikinieji failai pašalinami atkūrimo metu
- Puslapių skaitymai atnaujina puslapio lygio naujumą, o dokumentų skaičiaus, puslapių skaičiaus ir baitų ribos išrodo seniausiai naudotus duomenis
- Sumažinus nustatytąją ribą, būsena susilygina tučtuojau, o ne laukia vėlesnio įrašymo
- Sugedusieji PNG failai, pasenę arba dubliuotieji indeksų eilučių įrašai, trūkstamieji aplankai ir neindeksuotieji podėlio aplankai sutaisomi automatiškai
- Netinkami dokumentų raktai ir koordinatės atmetami dar prieš liečiant failų sistemą
- Susietieji dokumentų aplankai atkūrimo, skaitymų, rašymų, netekėjimo ir išmetimo metu praleidžiami; sąsajos ir jų išorinės paskirties bylos išlaikomos
Nuosavybė
THPDFWeightedCachevaldoPutperduodamas reikšmes, nebent reikšmę grąžinaExtractTHPDFDiskPageCache.Lookupgrąžina naujai skirtą bitmap, kurią valdo kvietėjas- Į
THPDFDiskPageCache.Storeperduodamos bitmap reikšmės lieka kvietėjo valdomos
Susijusios 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