Cache Infrastructure
HotPDF menyediakan cache memori berbobot yang terbatas bagi objek perantara yang dapat digunakan kembali dan cache halaman yang dirender secara persisten yang digunakan oleh perenderan dokumen yang dimuat
Cache memori berbobot
THPDFWeightedCache dalam HPDFCache memiliki nilai TObject, mengindeksnya berdasarkan AnsiString, dan mengeluarkan nilai yang paling jarang digunakan hingga bobot gabungannya memenuhi MaxBytes
GetdanTryGetmempromosikan hit menjadi paling sering digunakan dan memperbarui statistik permintaanPeekdanContainsKeymemeriksa entri tanpa mengubah kebaruan atau statistik permintaanPutmengambil kepemilikan, menggantikan kunci yang ada di tempat, dan menerima dengan aman objek yang sama lagi ketika hanya bobotnya yang berubahRemovemembebaskan entri, sementaraExtractmemindahkan kepemilikan ke pemanggil- Mengurangi
MaxBytessegera mengeluarkan entri, danTrimToBudgetmengekspos operasi konvergensi yang sama secara eksplisit Hits,Misses,HitRate,Evictions,Rejections, danReplacementsmengekspos perilaku cache, sementaraResetStatisticsmemulai interval pengukuran baru- Kapasitas slot tumbuh secara geometris dan entri aktif tetap ditautkan dalam urutan kebaruan waktu konstan
Kunci konten
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Kedua fungsi mengembalikan kunci heksadesimal SHA-256 huruf kecil yang sama untuk konten yang sama
HPDFCacheKeyOfStream melakukan hash tanpa mengalokasikan larik byte ukuran penuh kedua, membaca stream yang dapat di-seek dari posisi nol, dan memulihkan posisi aslinya
Cache halaman yang dirender secara persisten
Tetapkan THotPDF.RenderCacheFolder untuk mengaktifkan tingkat disk yang digunakan setelah cache halaman yang dirender dalam memori
- Berkas halaman dikunci berdasarkan konten dokumen, indeks halaman berbasis nol, dan DPI
- Pembaruan PNG dan indeks bersifat atomik, dan berkas sementara yang ditinggalkan dihapus selama pemulihan
- Pembacaan halaman menyegarkan kebaruan tingkat halaman, sementara jumlah dokumen, jumlah halaman, dan batas byte mengeluarkan data yang paling jarang digunakan
GetLoadedFontDecodermenyalin array terkelola secara mendalam sehingga pemanggil tidak bisa memutasi pemetaan atau lebar yang di-cache- Muat ulang dokumen, mutasi graf, invalidasi halaman, JSON Patch, dan setiap penugasan
CMapResourcePathmembersihkan decoder yang ditahan - Mengurangi batas yang dikonfigurasi segera konvergen alih-alih menunggu tulisan berikutnya
GetLoadedFontDecoderCacheInfomemperlihatkan entri, estimasi byte, budget, hit, miss, parse, pengusiran, dan invalidasi
Cache dekode gambar termuat ter-shard
Setiap instance THotPDF mengoordinasikan pemakaian ulang dekode gambar termuat melalui 16 shard metadata yang terkunci independen
- Lookup dan penerimaan cache hanya mengunci shard terpilih, sementara dekode filter dan gambar yang mahal berjalan di luar kunci cache
- Singleflight per-key yang persis memilih satu dekode owner dan membuat pemanggil duplikat menunggu hasil selesai yang sama
ImageCacheMaxBytesyang dikonfigurasi, batas jumlah entri, dan batas per-entri tetap global di semua shard- Entri gambar hasil dekode memegang handle immutable berhitung-referensi yang selamat dari pengusiran dan membiarkan renderer menggambar hit hangat tanpa mematerialisasi salinan
TBitmap - Gambar yang selesai disalin ke instance
TBitmapmilik pemanggil sehingga pemanggil tidak bisa memutasi piksel cache yang ditahan - Muat ulang dokumen dan invalidasi cache gambar membersihkan entri yang selesai, sementara objek flight aktif mempertahankan masa hidup berhitung-referensi miliknya sendiri
GetImageDecodeConcurrencyInfomelaporkan flight aktif, dekode owner aktif dan puncak, tunggu, penyelesaian, dan kegagalan
Cache transform ICC
HPDFICC berbagi transform lengkap sumber-ke-sRGB melalui cache LRU berbobot 64 MiB yang thread-safe, termasuk profil proof dan output bila dikonfigurasi
- Key SHA-256 mencakup konten sumber, proof, dan profil output yang lengkap, rendering intent efektif, serta setelan kompensasi black-point
HPDFGetICCTransformCacheInfomelaporkan hit, miss, pengusiran, penolakan, jumlah entri, byte saat ini dan byte maksimumHPDFSetICCTransformCacheMaxBytesmenerapkan budget baru seluruh proses seketika dan mengusir transform yang paling lama tak dipakai bila perluHPDFClearICCTransformCachemelepas transform yang ditahan dan mereset statistik permintaan tanpa membatalkan antarmuka transform yang sudah dipegang pemanggil
Cache font-subset persisten
Setel THotPDF.FontSubsetCacheFolder untuk mengaktifkan hasil subset TrueType dan OpenType yang dapat dipakai ulang selama EnableFontSubsetting aktif
- Key mencakup byte font asli, bitmap glyph-terpakai yang persis, mode kompak atau sparse, dan versi skema cache
- Baik jalur font-store GDI normal maupun finalizer font Unicode terdaftar memakai ulang cache yang sama
- Entri PDF/A kompak mempertahankan peta GID lama-ke-baru dan jumlah glyph baru yang dibutuhkan
CIDToGIDMap - Entri divalidasi sebelum dipakai, entri korup dihapus, dan penggantian memakai pemindahan atomik dalam direktori yang sama
FontSubsetCacheMaxByteslangsung berlaku dan mengusir file cache persis yang paling lama tidak diakses tanpa menelusuri folder tak terkaitGetFontSubsetCacheInfomelaporkan hit, miss, penulisan, pengusiran, korupsi, penolakan, kegagalan tulis, byte, dan fileClearFontSubsetCachehanya menghapus entri font-subset dan entri sementara yang terlantar dari folder yang dikonfigurasi
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Cache halaman hasil render persisten
Setel THotPDF.RenderCacheFolder untuk mengaktifkan tingkat disk yang dipakai setelah cache halaman hasil render di memori
- File halaman dikunci oleh konten dokumen, indeks halaman berbasis nol, DPI, visibilitas optional-content efektif, intent warna, dan policy fallback
- Perubahan layer dan intent warna memilih varian state yang dapat dipakai ulang alih-alih membuang semua bitmap cache
- Pembaruan PNG dan indeks bersifat atomik, dan file sementara yang terlantar dihapus saat pemulihan
- Baca halaman menyegarkan kebaruan level halaman, sementara batas jumlah dokumen, jumlah halaman, dan byte mengusir data yang paling lama tak dipakai
- Menurunkan batas yang dikonfigurasi langsung konvergen alih-alih menunggu penulisan berikutnya
- File PNG korup, baris indeks usang atau duplikat, folder yang hilang, dan folder cache yang tak terindeks diperbaiki otomatis
- Key dokumen dan koordinat yang tidak valid ditolak sebelum menyentuh filesystem
- Folder dokumen yang berupa link dilewati saat pemulihan, baca, tulis, invalidasi, dan eviction; link beserta file target eksternalnya dipertahankan
Kepemilikan
THPDFWeightedCachememiliki nilai yang diteruskan kePutkecuali nilai dikembalikan olehExtractTHPDFDiskPageCache.Lookupmengembalikan bitmap yang baru dialokasikan yang dimiliki oleh pemanggil- Nilai bitmap yang diteruskan ke
THPDFDiskPageCache.Storetetap dimiliki oleh pemanggil
API terkait
- Persistent Font-Subset Cache
- THotPDF.LoadedFontDecoderCacheMaxBytes
- THotPDF.GetLoadedFontDecoderCacheInfo
- Sharded Loaded-Image Decode Cache
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Diagnostik Rendering dan Telemetri Operasi