Cache Infrastructure
HotPDF dostarcza ograniczoną pamięć podręczną ważoną dla obiektów pośrednich wielokrotnego użytku oraz trwałą pamięć podręczną renderowanych stron używaną przez renderowanie załadowanych dokumentów
Ważona pamięć podręczna
THPDFWeightedCache w jednostce HPDFCache jest właścicielem wartości TObject, indeksuje je według AnsiString i usuwa najdawniej używane wartości, dopóki ich łączna waga mieści się w MaxBytes
GetiTryGetpromują trafienie na najczęściej używane i aktualizują statystyki żądańPeekiContainsKeysprawdzają wpisy bez zmiany kolejności użycia ani statystyk żądańPutprzejmuje własność, zastępuje istniejący klucz w miejscu i bezpiecznie przyjmuje ponownie ten sam obiekt, gdy zmienia się tylko jego wagaRemovezwalnia wpis, natomiastExtractprzekazuje własność wywołującemu- Zmniejszenie
MaxBytesnatychmiast usuwa wpisy, aTrimToBudgetjawnie udostępnia tę samą operację zbieżności Hits,Misses,HitRate,Evictions,RejectionsiReplacementsudostępniają zachowanie pamięci podręcznej, natomiastResetStatisticsrozpoczyna nowy interwał pomiaru- Pojemność slotów rośnie geometrycznie, a aktywne wpisy pozostają powiązane w kolejności użycia ze stałym czasem
Klucze treści
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Obie funkcje zwracają ten sam klucz szesnastkowy SHA-256 zapisany małymi literami dla tej samej treści
HPDFCacheKeyOfStream wyznacza skrót bez przydzielania drugiej tablicy bajtów o pełnym rozmiarze, odczytuje strumienie przeszukiwalne od pozycji zero i przywraca ich pierwotną pozycję
Trwała pamięć podręczna renderowanych stron
Ustaw THotPDF.RenderCacheFolder, aby włączyć warstwę dyskową używaną po pamięci podręcznej renderowanych stron w pamięci
- Domyślny budżet to 32 MiB przy twardym limicie 128 wpisów, a budżet zero-bajtowy wyłącza retencję
- Współdzielone indirect font dictionary reużywają jeden sparsowany rdzeń między stronami, nawet gdy strony używają różnych nazw zasobów
- Ekstrakcja tekstu, eksport SVG, zamiana tekstu w załadowanym dokumencie i jawne żądania dekodera korzystają z tego samego cache
GetLoadedFontDecoderdeep-copyje zarządzane tablice, więc wywołujący nie mogą mutować cache'owanych mapowań ani szerokości- Przeładowanie dokumentu, mutacja grafu, unieważnienie strony, JSON Patch i każde przypisanie
CMapResourcePathczyszczą zatrzymane dekodery - Pozyskiwanie dekodera jest serializowane per dokument, żeby nie parsować jednego fonta podwójnie, ale ta blokada nie czyni bezpieczną współbieżną mutację dokumentu
GetLoadedFontDecoderCacheInfoujawnia liczbę wpisów, szacowane bajty, budżet, trafienia, pudła, parsowania, eksmisje i unieważnienia
Odłamkowany cache dekodowania obrazów załadowanego dokumentu
Każda instancja THotPDF koordynuje reużycie dekodowania obrazów z załadowanego dokumentu przez 16 niezależnie blokowanych shardów metadanych
- Lookup i przyjmowanie do cache trzymają tylko wybrany shard, podczas gdy kosztowne dekodowanie filtrów i obrazów działa poza blokadami cache
- Dokładny per-key singleflight wybiera jednego właściciela dekodowania, a zdublowani wywołujący czekają na ten sam ukończony wynik
- Skonfigurowane
ImageCacheMaxBytes, limit liczby wpisów i limit per wpis pozostają globalne dla wszystkich shardów - Wpisy zdekodowanych obrazów trzymają niemutowalne uchwyty z licznikiem referencji, które przeżywają eksmisję i pozwalają rendererom rysować ciepłe trafienia bez materializowania kopii
TBitmap - Ukończone obrazy są kopiowane do instancji
TBitmapnależących do wywołującego, więc nie może on mutować pikseli zatrzymanych w cache - Przeładowanie dokumentu i unieważnienie cache obrazów czyszczą ukończone wpisy, podczas gdy aktywne obiekty flight zachowują własny czas życia z licznikiem referencji
GetImageDecodeConcurrencyInforaportuje aktywne flighty, aktywne i szczytowe dekodowania właściciela, oczekiwania, ukończenia i porażki
Cache transformacji ICC
HPDFICC współdzieli kompletne transformacje źródło-do-sRGB przez wątkowo bezpieczny ważony cache LRU 64 MiB, łącznie z profilami proof i output, gdy są skonfigurowane
- Klucz SHA-256 pokrywa kompletną zawartość profilu źródłowego, proof i output, efektywny rendering intent oraz ustawienie black-point compensation
HPDFGetICCTransformCacheInforaportuje trafienia, pudła, eksmisje, odrzucenia, liczbę wpisów, aktualne i maksymalne bajtyHPDFSetICCTransformCacheMaxBytesnatychmiast stosuje nowy budżet procesowy i w miarę potrzeby eksmisuje transformacje najdawniej używaneHPDFClearICCTransformCacheuwalnia zatrzymane transformacje i zeruje statystyki żądań bez unieważniania interfejsów transformacji już trzymanych przez wywołujących
Trwały cache podzbiorów fontów
Ustaw THotPDF.FontSubsetCacheFolder, aby włączyć reużywalne wyniki podzbiorów TrueType i OpenType, gdy aktywny jest EnableFontSubsetting
- Klucz pokrywa oryginalne bajty fontu, dokładną bitmapę użytych glifów, tryb compact albo sparse i wersję schematu cache
- Zarówno normalna ścieżka magazynu fontów GDI, jak i zarejestrowany finalizer fontów Unicode reużywają tego samego cache
- Wpisy compact PDF/A zachowują mapę stare-nowy GID i nową liczbę glifów potrzebną
CIDToGIDMap - Wpisy są walidowane przed użyciem, uszkodzone są usuwane, a zamiana używa atomowego przeniesienia w tym samym katalogu
FontSubsetCacheMaxBytesdziała natychmiast i eksmisuje najdawniej używane pliki cache bez przechodzenia po niepowiązanych katalogachGetFontSubsetCacheInforaportuje trafienia, pudła, zapisy, eksmisje, uszkodzenia, odrzucenia, porażki zapisu, bajty i plikiClearFontSubsetCacheusuwa z skonfigurowanego katalogu tylko wpisy podzbiorów fontów i porzucone wpisy tymczasowe
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;Trwały cache renderowanych stron
Ustaw THotPDF.RenderCacheFolder, aby włączyć warstwę dyskową używaną po pamięciowym cache renderowanych stron
- Pliki stron są kluczowane treścią dokumentu, indeksem strony od zera, DPI, efektywną widocznością optional content, intencją koloru i polityką fallback
- Zmiany warstw i intencji koloru wybierają reużywalne warianty stanu zamiast wyrzucać każdy cache'owany bitmap
- Aktualizacje PNG i indeksu są atomowe, a porzucone pliki tymczasowe są usuwane podczas odzyskiwania
- Odczyty stron odświeżają świeżość na poziomie strony, a limity liczby dokumentów, stron i bajtów eksmisują dane najdawniej używane
- Zmniejszenie skonfigurowanego limitu zbiega natychmiast, bez czekania na późniejszy zapis
- Uszkodzone pliki PNG, nieświeże lub zdublowane wiersze indeksu, brakujące katalogi i nieindeksowane katalogi cache są naprawiane automatycznie
- Niepoprawne klucze dokumentów i współrzędne są odrzucane przed dostępem do systemu plików
- Katalogi dokumentów będące linkami są pomijane podczas odzyskiwania, odczytów, zapisów, unieważniania i eksmisji; linki i ich zewnętrzne pliki docelowe pozostają nienaruszone
Własność
THPDFWeightedCachejest właścicielem wartości przekazanych doPut, chyba że wartość została zwrócona przezExtractTHPDFDiskPageCache.Lookupzwraca nowo przydzieloną mapę bitową, której właścicielem jest wywołujący- Wartości map bitowych przekazane do
THPDFDiskPageCache.Storepozostają własnością wywołującego
Powiązane API
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Rendering Diagnostics and Operation Telemetry