Önbellek Altyapısı
HotPDF, yeniden kullanılabilir ara nesneler için sınırlı ağırlıklı bir bellek önbelleği ve yüklenen belge işlemede kullanılan kalıcı bir işlenmiş sayfa önbelleği sunar
Ağırlıklı bellek önbelleği
HPDFCache birimindeki THPDFWeightedCache, TObject değerlerinin sahibidir, bunları AnsiString ile dizinler ve birleşik ağırlıkları MaxBytes değerine sığıncaya kadar en az son kullanılan değerleri çıkarır
GetveTryGet, bulunan girdiyi en son kullanılan konuma taşır ve istek istatistiklerini güncellerPeekveContainsKey, girdileri kullanım sırasını veya istek istatistiklerini değiştirmeden incelerPutsahipliği alır, var olan bir anahtarı yerinde değiştirir ve yalnızca ağırlığı değiştiğinde aynı nesneyi yeniden güvenle kabul ederRemovebir girişi serbest bırakır,Extractise sahipliği çağırana devrederMaxBytesdeğerini düşürmek girişleri hemen çıkarır veTrimToBudgetaynı yakınsama işlemini açıkça sunarHits,Misses,HitRate,Evictions,RejectionsveReplacementsönbellek davranışını ortaya koyar;ResetStatisticsyeni bir ölçüm aralığı başlatır- Yuva kapasitesi geometrik olarak büyür ve canlı girişler sabit zamanlı son kullanma sırasında bağlı kalır
İçerik anahtarları
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Her iki işlev de aynı içerik için aynı küçük harfli SHA-256 onaltılık anahtarı döndürür
HPDFCacheKeyOfStream ikinci bir tam boyutlu bayt dizisi ayırmadan karma işlemini yapar, aranabilir akışları sıfır konumundan okur ve özgün konumlarını geri yükler
Yüklenen yazı tipi çözücü önbelleği
Bellek içi işlenmiş sayfa önbelleğinden sonra kullanılan disk katmanını etkinleştirmek için THotPDF.RenderCacheFolder özelliğini ayarlayın
- Varsayılan bütçe 128 girdilik katı bir sınırıyla 32 MiB'dir; sıfır baytlık bütçe saklamayı devre dışı bırakır
- Paylaşılan dolaylı yazı tipi sözlükleri, sayfalar farklı kaynak adları kullansa bile tek bir ayrıştırılmış çekirdeği sayfalar arasında yeniden kullanır
- Metin çıkarma, SVG dışa aktarma, yüklenen metin değişimi ve açık çözücü istekleri aynı önbelleği paylaşır
GetLoadedFontDecoder, yönetilen dizileri derin kopyalar; böylece çağıranlar önbellekteki eşlemeleri veya genişlikleri değiştiremez- Belgeyi yeniden yükleme, grafik değişikliği, sayfa geçersiz kılma, JSON Patch ve her
CMapResourcePathataması, tutulan çözücüleri temizler - Çözücü edinimi, bir yazı tipinin yinelenen ayrıştırılmasını önlemek için belge başına serileştirilir; ama kilit, eşzamanlı belge değişikliğini güvenli yapmaz
GetLoadedFontDecoderCacheInfo; girdileri, tahmini baytları, bütçeyi, isabetleri, ıskaları, ayrıştırmaları, tahliyeleri ve geçersiz kılmaları ortaya koyar
Parçalı yüklenen görüntü çözme önbelleği
Her THotPDF örneği, yüklenen görüntü çözme yeniden kullanımını 16 bağımsız kilitli üst veri parçası üzerinden koordine eder
- Önbellek araması ve kabul, yalnızca seçili shard'ı kilitler; maliyetli filtre ve görüntü çözme işleri önbellek kilitleri dışında çalışır
- Anahtar başına kesin singleflight, tek bir sahip çözmeyi seçer ve yinelenen çağıranları aynı tamamlanmış sonucu bekletir
- Yapılandırılan
ImageCacheMaxBytes, girdi sayısı sınırı ve girdi başına sınır tüm parçalarda global kalır - Çözülmüş görüntü girdileri, tahliyeden sağ çıkan değişmez referans sayımlı tanıtıcılar taşır ve çizicilerin sıcak isabetleri, bir
TBitmapkopyası oluşturmadan çizmesini sağlar - Tamamlanan görüntüler çağıranın sahiplendiği
TBitmapörneklerine kopyalanır; böylece çağıranlar önbellekte tutulan pikselleri değiştiremez - Belgeyi yeniden yükleme ve görüntü önbelleği geçersizleştirme tamamlanan girdileri temizler; uçuştaki etkin nesneler kendi referans sayımlı ömürlerini korur
GetImageDecodeConcurrencyInfo; etkin uçuşları, etkin ve zirve sahip çözmeleri, beklemeleri, tamamlanmaları ve hataları bildirir
ICC dönüşüm önbelleği
HPDFICC, yapılandırıldığında kanıt ve çıktı profillerini de kapsayan eksiksiz kaynak-to-sRGB dönüşümlerini, iş parçacığı güvenli 64 MiB'lik ağırlıklı bir LRU önbelleği üzerinden paylaşır
- SHA-256 anahtarı; eksiksiz kaynak, kanıt ve çıktı profili içeriklerini, etkin rendering intent ve siyah nokta dengelemesi ayarını kapsar
HPDFGetICCTransformCacheInfo; isabetleri, ıskalaları, tahliyeleri, reddedilenleri, girdi sayısını, güncel baytları ve en yüksek bayt sayısını bildirirHPDFSetICCTransformCacheMaxBytesyeni bir süreç genel bütçesini hemen uygular ve gerektiğinde en uzun süredir kullanılmayan dönüşümleri tahliye ederHPDFClearICCTransformCache, tutulan dönüşümleri serbest bırakır ve istek istatistiklerini sıfırlar; çağıranların elindeki dönüşüm arayüzlerini geçersiz kılmaz
Kalıcı yazı tipi alt küme önbelleği
EnableFontSubsetting etkinken yeniden kullanılabilir TrueType ve OpenType alt küme sonuçlarını etkinleştirmek için THotPDF.FontSubsetCacheFolder ayarlayın
- Anahtar; özgün yazı tipi baytlarını, kullanılan gliflerin kesin bitmap'ini, compact veya sparse kipini ve önbellek şema sürümünü kapsar
- Hem normal GDI yazı tipi deposu yolu hem de kayıtlı Unicode yazı tipi sonlandırıcısı aynı önbelleği yeniden kullanır
- Kompakt PDF/A girdileri,
CIDToGIDMap'in gereksindiği eski-to-yeni GID haritasını ve yeni glif sayısını korur - Girdiler kullanımdan önce doğrulanır, bozuk girdiler kaldırılır ve değiştirme, aynı dizin içinde atomik bir taşımayla yapılır
FontSubsetCacheMaxByteshemen uygulanır ve en uzun süredir erişilmeyen kesin önbellek dosyalarını, ilgisiz klasörlere uğramadan tahliye ederGetFontSubsetCacheInfo; isabetleri, ıskaları, yazımları, tahliyeleri, bozulmaları, reddedilenleri, yazım hatalarını, baytları ve dosyaları bildirirClearFontSubsetCache, yapılandırılan klasörden yalnızca yazı tipi alt küme girdilerini ve sahipsiz geçici girdileri kaldırır
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Kalıcı çizilmiş sayfa önbelleği
Bellek içi render edilmiş sayfa cache'inden sonra devreye giren disk katmanını etkinleştirmek için THotPDF.RenderCacheFolder özelliğini ayarlayın
- Sayfa dosyaları; belge içeriği, sıfır tabanlı sayfa indeksi, DPI, etkin optional-content görünürlüğü, renk niyeti ve geri dönüş ilkesine göre anahtarlanır
- Katman ve renk niyeti değişiklikleri, önbellekteki her bitmap'i atmak yerine yeniden kullanılabilir durum varyantlarını seçer
- PNG ve indeks güncellemeleri atomiktir; sahipsiz geçici dosyalar kurtarma sırasında kaldırılır
- Sayfa okumaları sayfa düzeyindeki tazeliği yeniler; belge sayısı, sayfa sayısı ve bayt sınırları en uzun süredir kullanılmayan veriyi tahliye eder
- Yapılandırılmış bir sınırı düşürmek, sonraki yazımı beklemek yerine hemen sonuçlanır
- Bozuk PNG dosyaları, bayat veya yinelenen indeks satırları, eksik klasörler ve indekslenmemiş önbellek klasörleri otomatik onarılır
- Geçersiz belge anahtarları ve koordinatlar, dosya sistemine erişimden önce reddedilir
- Bağlı belge klasörleri; kurtarma, okuma, yazma, geçersiz kılma ve tahliye sırasında atlanır, bağlantılar ve harici hedef dosyaları korunur
Sahiplik
THPDFWeightedCache,Put'a verilen değerlerin sahibidir; yalnızcaExtractile geri döndürülen değerler bunun dışındadırTHPDFDiskPageCache.Lookup, çağıranın sahibi olduğu yeni ayrılmış bir bit eşlem döndürürTHPDFDiskPageCache.Storeöğesine geçirilen bit eşlem değerleri çağılananın sahibi olarak kalır
İlgili API'ler
- 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