Cache-infrastructuur
HotPDF biedt begrensde geheugencaching plus persistente caches voor herbruikbare fontsubsets en gerenderde pagina's
Geweegd geheugencache
THPDFWeightedCache in HPDFCache is eigenaar van TObject-waarden, indexeert die op AnsiString en verdrijft de langst ongebruikte waarden totdat hun gecombineerde gewicht binnen MaxBytes past
GetenTryGetpromoveren een hit naar meest recent gebruikt en werken de verzoekstatistieken bijPeekenContainsKeybekijken invoeren zonder recentie of verzoekstatistieken te veranderenPutneemt het eigendom, vervangt een bestaande sleutel in place en accepteert veilig opnieuw hetzelfde object wanneer alleen diens gewicht verandertRemovegeeft een invoer vrij, terwijlExtracthet eigendom aan de aanroeper overdraagt- Het verlagen van
MaxBytesverdrijft invoeren onmiddellijk, enTrimToBudgetstelt dezelfde convergentieoperatie expliciet beschikbaar Hits,Misses,HitRate,Evictions,RejectionsenReplacementsstellen het cachegedrag beschikbaar, terwijlResetStatisticseen nieuw meetinterval start- Slotcapaciteit groeit meetkundig en levende invoeren blijven in constante tijd gelinkt op recentievolgorde
Content keys
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString; function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Beide functies geven voor dezelfde content dezelfde lowercase SHA-256-hexadecimale sleutel terug
HPDFCacheKeyOfStream hasht zonder een tweede byte-array op volledige grootte toe te wijzen, leest seekable streams vanaf positie nul en herstelt hun oorspronkelijke positie
Decodercache voor geladen fonts
Elke THotPDF-instantie bewaart succesvol geparsde decoders van geladen fonts in een documentscope-geweegde LRU-cache
- Het defaultbudget is 32 MiB met een harde limiet van 128 invoeren, en een nul-bytebudget schakelt retentie uit
- Gedeelde indirecte fontwoordenboeken hergebruiken één geparsde core over pagina's heen, zelfs wanneer pagina's andere resourcenamen gebruiken
- Tekstextractie, SVG-export, vervanging van geladen tekst en expliciete decoderaanvragen delen dezelfde cache
GetLoadedFontDecodermaakt deep copies van managed arrays, zodat aanroepers gecachte mappings of breedtes niet kunnen muteren- Documentherlaad, graafmutatie, pagina-invalidatie, JSON Patch en elke
CMapResourcePath-toewijzing wissen bewaarde decoders - Decoderverwerving wordt per document geserialiseerd om dubbel parsen van één font te vermijden, maar de lock maakt gelijktijdige documentmutatie niet veilig
GetLoadedFontDecoderCacheInfostelt invoeren, geschatte bytes, budget, hits, misses, parses, evictions en invalidaties beschikbaar
Gesharde decodecache voor geladen afbeeldingen
Elke THotPDF-instantie coördineert hergebruik van gedecodeerde geladen afbeeldingen via 16 onafhankelijk gelockte metadatashards
- Cache-opzoeking en toelating houden alleen de gekozen shard vast, terwijl dure filter- en afbeeldingsdecodering buiten cachelocks draait
- Een exacte per-key singleflight kiest één eigenaarsdecode en laat duplicaataanroepers wachten op hetzelfde voltooide resultaat
- De ingestelde
ImageCacheMaxBytes, de invoeraantallimiet en de per-invoerlimiet blijven globaal over alle shards - Gedecodeerde-afbeeldingsinvoeren houden immutable, referentietelde handles vast die een eviction overleven en waarmee renderers warme hits kunnen tekenen zonder een
TBitmap-kopie te materialiseren - Voltooide afbeeldingen worden gekopieerd naar
TBitmap-instanties in eigendom van de aanroeper, zodat aanroepers bewaarde cachepixels niet kunnen muteren - Documentherlaad en afbeeldingscache-invalidatie wissen voltooide invoeren, terwijl actieve flight-objecten hun eigen referentietelde levensduur behouden
GetImageDecodeConcurrencyInforapporteert actieve flights, actieve en piek-eigenaarsdecodes, wachttijden, voltooiingen en falen
ICC-transformatiecache
HPDFICC deelt volledige bron-naar-sRGB-transformaties via een thread-safe gewogen LRU-cache van 64 MiB, inclusief proof- en uitvoerprofielen wanneer die zijn ingesteld
- De SHA-256-sleutel dekt de volledige inhoud van bron-, proof- en uitvoerprofielen, de effectieve rendering intent en de black-point-compensatie-instelling
HPDFGetICCTransformCacheInforapporteert hits, misses, evictions, rejections, het aantal invoeren, huidige bytes en maximale bytesHPDFSetICCTransformCacheMaxBytespast onmiddellijk een nieuw procesbreed budget toe en verdrijft zo nodig langst ongebruikte transformatiesHPDFClearICCTransformCachegeeft bewaarde transformaties vrij en reset de verzoekstatistieken zonder transformatieinterfaces die aanroepers al vasthouden ongeldig te maken
Persistente fontsubset-cache
Zet THotPDF.FontSubsetCacheFolder in om herbruikbare TrueType- en OpenType-subsetresultaten aan te zetten terwijl EnableFontSubsetting actief is
- De sleutel dekt de oorspronkelijke fontbytes, de exacte gebruikte-glyph-bitmap, compacte of sparse-modus en de cacheschemaversie
- Zowel het normale GDI font-store-pad als de geregistreerde Unicode-fontfinalizer hergebruikt dezelfde cache
- Compacte PDF/A-invoeren bewaren de oud-naar-nieuw-GID-map en het nieuwe glyphaantal dat
CIDToGIDMapnodig heeft - Invoeren worden voor gebruik gevalideerd, corrupte invoeren worden verwijderd en vervanging gebruikt een atomaire verplaatsing binnen dezelfde map
FontSubsetCacheMaxByteswerkt onmiddellijk en verdrijft de langst ongebruikte exacte cachebestanden zonder ongerelateerde mappen te doorlopenGetFontSubsetCacheInforapporteert hits, misses, writes, evictions, corruptie, rejections, schrijffalen, bytes en bestandenClearFontSubsetCacheverwijdert uit de ingestelde map alleen fontsubset-invoeren en achtergebleven tijdelijke invoeren
PDF.EnableFontSubsetting := True; PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets'; PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Persistente cache met gerenderde pagina's
Zet THotPDF.RenderCacheFolder in om de schijftier te gebruiken die na de in-memory cache met gerenderde pagina's komt
- Paginabestanden worden gesleuteld op documentcontent, zero-based pagina-index, DPI, effectieve optional-content-zichtbaarheid, kleurintent en fallbackbeleid
- Wijzigingen in laag of kleurintent kiezen herbruikbare statusvarianten in plaats van elke gecachte bitmap weg te gooien
- PNG- en indexupdates zijn atomair, en achtergebleven tijdelijke bestanden worden tijdens herstel verwijderd
- Paginalezingen verversen de recentie op paginaniveau, terwijl documentaantal, paginaaantal en bytelimieten langst ongebruikte data verdrijven
- Het verlagen van een ingestelde limiet convergeert onmiddellijk in plaats van te wachten op een latere schrijfactie
- Corrupte PNG-bestanden, verouderde of dubbele indexrijen, ontbrekende mappen en niet-geïndexeerde cachemappen worden automatisch hersteld
- Ongeldige documentsleutels en coördinaten worden geweigerd vóór bestandssysteemtoegang
- Gelinkte documentmappen worden overgeslagen tijdens herstel, leesacties, schrijfacties, invalidatie en eviction; links en hun externe doelbestanden blijven behouden
Eigendom
THPDFWeightedCacheis eigenaar van waarden die aanPutworden doorgegeven, tenzij een waarde doorExtractwordt teruggegevenTHPDFDiskPageCache.Lookupgeeft een pas toegewezen bitmap in eigendom van de aanroeper terug- Bitmapwaarden die aan
THPDFDiskPageCache.Storeworden doorgegeven, blijven eigendom van de aanroeper
Gerelateerde API's
- Persistente lettersubset-cache
- LoadedFontDecoderCacheMaxBytes
- GetLoadedFontDecoderCacheInfo
- Sharded Loaded-Image Decode Cache
- THotPDF.GetImageDecodeConcurrencyInfo-methode
- THotPDF.RenderCacheFolder Property
- THotPDF.RenderCacheMaxDocuments Property
- THotPDF.RenderCacheMaxBytes Property
- THotPDF.RenderLoadedPageToBitmapCached
- Renderingdiagnostiek en -telemetrie