Cache Infrastructure
HotPDF pruža ograničenu memorijsku predmemoriju plus trajne predmemorije za višekratno upotrebljive podskupove fontova i renderirane stranice
Težinska memorijska predmemorija
THPDFWeightedCache u HPDFCache-u posjeduje TObject vrijednosti, indeksira ih po AnsiString-u i izbacuje najmanje nedavno korištene vrijednosti dok njihova kombinirana težina ne stane u MaxBytes
GetiTryGetpodižu pogodak na najnedavnije korišteno i ažuriraju statistiku zahtjevaPeekiContainsKeypregledavaju unose bez mijenjanja nedavnosti ili statistike zahtjevaPutpreuzima vlasništvo, zamjenjuje postojeći ključ na mjestu i sigurno ponovno prihvaća isti objekt kada se mijenja samo njegova težinaRemoveoslobađa unos, dokExtractprenosi vlasništvo na pozivatelja- Smanjivanje
MaxBytes-a odmah izbacuje unose, aTrimToBudgeteksplicitno izlaže istu operaciju konvergencije Hits,Misses,HitRate,Evictions,RejectionsiReplacementsizlažu ponašanje predmemorije, dokResetStatisticszapočinje novo razdoblje mjerenja- Kapacitet utora raste geometrijski, a živi unosi ostaju povezani u redoslijedu nedavnosti konstantnog vremena
Ključevi sadržaja
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;Obje funkcije vraćaju isti mali SHA-256 heksadecimalni ključ za isti sadržaj
HPDFCacheKeyOfStream hashira bez alokacije drugog punog bajtnog polja, čita potražljive tokove od pozicije nula i vraća njihovu izvornu poziciju
Predmemorija dekodera učitanih fontova
Svaka instanca THotPDF-a zadržava uspješno parsirane dekodere učitanih fontova u weighted LRU predmemoriji opsega dokumenta
- Zadani proračun je 32 MiB s tvrdim ograničenjem od 128 unosa, a proračun od nula bajtova onemogućuje zadržavanje
- Dijeljeni neizravni rječnici fontova ponovno koriste jednu parsiranu jezgru kroz stranice, čak i kada stranice koriste različite nazive resursa
- Izdvajanje teksta, SVG izvoz, zamjena učitanog teksta i eksplicitni zahtjevi dekodera dijele istu predmemoriju
GetLoadedFontDecoderduboko kopira upravljana polja tako da pozivatelji ne mogu mijenjati predmemorirana mapiranja ni širine- Ponovno učitavanje dokumenta, mutacija grafa, poništavanje stranica, JSON Patch i svako dodjeljivanje
CMapResourcePath-a brišu zadržane dekodere - Stjecanje dekodera serializira se po dokumentu kako bi se izbjeglo duplicirano parsiranje jednog fonta, ali brava ne čini istodobnu mutaciju dokumenta sigurnom
GetLoadedFontDecoderCacheInfoizlaže unose, procijenjene bajtove, proračun, pogotke, promašaje, parsiranja, izbacivanja i poništavanja
Razdijeljena predmemorija dekodiranja učitanih slika
Svaka instanca THotPDF-a koordinira ponovnom upotrebom dekodiranja učitanih slika kroz 16 neovisno zaključanih metadata shardova
- Pretraga i prijem predmemorije drže samo odabrani shard dok se skupo dekodiranje filtera i slika odvija izvan brava predmemorije
- Točan singleflight po ključu bira jednog vlasnika dekodiranja i navodi dvostruke pozivatelje da čekaju isti dovršeni rezultat
- Konfigurirani
ImageCacheMaxBytes, ograničenje broja unosa i ograničenje po unosu ostaju globalni kroz sve shardove - Unosi dekodiranih slika drže nepromjenjive ručice s brojanjem referenci koje prežive izbacivanje i dopuštaju rendererima crtanje toplih pogodaka bez materijalizacije
TBitmapkopije - Završene slike kopiraju se u instance
TBitmapu vlasništvu pozivatelja tako da pozivatelji ne mogu mijenjati zadržane piksele predmemorije - Ponovno učitavanje dokumenta i poništavanje predmemorije slika brišu dovršene unose dok aktivni objekti letova zadržavaju vlastiti životni vijek s brojanjem referenci
GetImageDecodeConcurrencyInfoizvještava aktivne letove, aktivna i vršna dekodiranja vlasnika, čekanja, dovršenja i neuspjehe
Predmemorija ICC transformacija
HPDFICC dijeli potpune transformacije izvor-u-sRGB kroz nitno-sigurnu 64 MiB ograničenu LRU predmemoriju, uključujući profile provjere i izlaza kada su konfigurirani
- SHA-256 ključ pokriva potpune sadržaje izvornog, provjernog i izlaznog profila, učinkovitu namjeru renderiranja i postavku kompenzacije crne točke
HPDFGetICCTransformCacheInfoizvještava pogotke, promašaje, izbacivanja, odbijanja, broj unosa, trenutne i maksimalne bajtoveHPDFSetICCTransformCacheMaxBytesodmah primjenjuje novi proračun za cijeli proces i po potrebi izbacuje najmanje nedavno korištene transformacijeHPDFClearICCTransformCacheotpušta zadržane transformacije i resetira statistiku zahtjeva bez poništavanja sučelja transformacija koje pozivatelji već drže
Trajna predmemorija podskupova fontova
Postavite THotPDF.FontSubsetCacheFolder da omogućite višekratno upotrebljive rezultate podskupova TrueType i OpenType dok je EnableFontSubsetting aktivan
- Ključ pokriva izvorne bajtove fonta, točnu bitmapu korištenih glifa, kompaktan ili rijedak način i verziju sheme predmemorije
- I uobičajeni put GDI spremišta fontova i registrirani finalizator Unicode fontova ponovno koriste istu predmemoriju
- Kompaktni PDF/A unosi čuvaju mapu stari-u-novi GID i novi broj glifa potreban
CIDToGIDMap-u - Unosi se validiraju prije upotrebe, oštećeni unosi se uklanjaju, a zamjena koristi atomsko preseljenje u istom direktoriju
FontSubsetCacheMaxBytesprimjenjuje se odmah i izbacuje najmanje nedavno pristupane točne datoteke predmemorije bez prelaska nepovezanih mapaGetFontSubsetCacheInfoizvještava pogotke, promašaje, pisanja, izbacivanja, oštećenja, odbijanja, neuspjele zapise, bajtove i datotekeClearFontSubsetCacheuklanja samo unose podskupova fontova i napuštene privremene unose iz konfigurirane mape
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;Trajna predmemorija renderiranih stranica
Postavite THotPDF.RenderCacheFolder da omogućite diskovni sloj korišten nakon predmemorije renderiranih stranica u memoriji
- Datoteke stranica ključane su po sadržaju dokumenta, indeksu stranice s nultom bazom, DPI-ju, učinkovitoj vidljivosti neobaveznog sadržaja, namjeri boja i politici rezerve
- Promjene sloja i namjere boja biraju ponovno upotrebljive varijante stanja umjesto odbacivanja svake predmemorirane bitmape
- PNG i ažuriranja indeksa atomski su, a napuštene privremene datoteke uklanjaju se tijekom oporavka
- Čitanja stranica osvježavaju nedavnost na razini stranice, dok ograničenja broja dokumenata, broja stranica i bajtova izbacuju najmanje nedavno korištene podatke
- Smanjivanje konfiguriranog ograničenja odmah konvergira umjesto čekanja kasnijeg pisanja
- Oštećene PNG datoteke, zastarjeli ili duplicirani redovi indeksa, nedostajuće mape i neindeksirane mape predmemorije automatski se popravljaju
- Nevažeći ključevi dokumenata i koordinate odbijaju se prije pristupa datotečnom sustavu
- Povezane mape dokumenata preskaču se tijekom oporavka, čitanja, pisanja, poništavanja i izbacivanja; veze i njihove vanjske ciljne datoteke ostaju sačuvane
Vlasništvo
THPDFWeightedCacheposjeduje vrijednosti proslijeđene uPutosim ako vrijednost vraćaExtractTHPDFDiskPageCache.Lookupvraća novododijeljenu bitmapu u vlasništvu pozivatelja- Bitmap vrijednosti proslijeđene
THPDFDiskPageCache.Store-u ostaju u vlasništvu pozivatelja
Povezani API-ji
- Trajna predmemorija podskupova fontova
- THotPDF.LoadedFontDecoderCacheMaxBytes
- THotPDF.GetLoadedFontDecoderCacheInfo
- Dijeljena predmemorija dekodiranja učitanih slika
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Dijagnostika prikazivanja i telemetrija operacija