Cache Infrastructure
HotPDF cung cấp một bộ nhớ đệm trọng số giới hạn trong bộ nhớ cho các đối tượng trung gian có thể tái sử dụng và một bộ nhớ đệm trang đã kết xuất liên tục được sử dụng bởi việc kết xuất tài liệu đã tải
Bộ nhớ đệm trọng số trong bộ nhớ
THPDFWeightedCache trong HPDFCache sở hữu các giá trị TObject, lập chỉ mục chúng theo AnsiString, và loại bỏ các giá trị ít sử dụng nhất cho đến khi trọng số kết hợp của chúng vừa MaxBytes
GetvàTryGetthăng hạng một lần trúng thành sử dụng nhiều nhất và cập nhật thống kê yêu cầuPeekvàContainsKeykiểm tra các mục mà không thay đổi tính mới hoặc thống kê yêu cầuPutnhận quyền sở hữu, thay thế một khóa hiện có tại chỗ, và chấp nhận an toàn cùng một đối tượng khi chỉ trọng số của nó thay đổiRemovegiải phóng một mục, trong khiExtractchuyển giao quyền sở hữu cho bên gọi- Giảm
MaxBytesloại bỏ các mục ngay lập tức, vàTrimToBudgetthể hiện cùng thao tác hội tụ đó một cách tường minh Hits,Misses,HitRate,Evictions,Rejections, vàReplacementsthể hiện hành vi bộ nhớ đệm, trong khiResetStatisticsbắt đầu một khoảng đo lường mới- Dung lượng khe tăng theo cấp số nhân và các mục đang hoạt động vẫn được liên kết theo thứ tự mới trong thời gian hằng số
Khóa nội dung
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Cả hai hàm trả về cùng khóa thập lục phân SHA-256 chữ thường cho cùng nội dung
HPDFCacheKeyOfStream băm mà không cấp phát một mảng byte cỡ đầy thứ hai, đọc các luồng có thể di chuyển từ vị trí không, và khôi phục vị trí ban đầu của chúng
Bộ nhớ đệm trang đã kết xuất liên tục
Đặt THotPDF.RenderCacheFolder để bật lớp đĩa được sử dụng sau bộ nhớ đệm trang đã kết xuất trong bộ nhớ
- Ngân sách mặc định là 32 MiB với giới hạn cứng 128 mục, và ngân sách byte bằng không tắt việc giữ lại
- Các từ điển font indirect dùng chung tái sử dụng một lõi đã phân tích xuyên các trang kể cả khi các trang dùng tên tài nguyên khác nhau
- Trích văn bản, xuất SVG, thay văn bản đã tải và các yêu cầu decoder tường minh dùng chung một cache
GetLoadedFontDecodersao chép sâu các mảng managed nên caller không thể sửa các ánh xạ hoặc độ rộng đã cache- Nạp lại tài liệu, biến đổi đồ thị, vô hiệu trang, JSON Patch và mỗi lần gán
CMapResourcePathđều xóa các decoder được giữ lại - Việc lấy decoder được tuần tự hóa theo từng tài liệu để tránh phân tích trùng một font, nhưng khóa không làm việc sửa tài liệu đồng thời trở nên an toàn
GetLoadedFontDecoderCacheInfophơi bày các mục, byte ước tính, ngân sách, hit, trượt, lần phân tích, loại bỏ và vô hiệu hóa
Cache giải mã ảnh đã tải phân shard
Mỗi thể hiện THotPDF điều phối việc tái dùng giải mã ảnh đã tải qua 16 shard metadata khóa độc lập
- Tra cứu và nhận vào cache chỉ giữ đúng shard được chọn trong khi việc giải mã filter và ảnh tốn kém chạy ngoài các khóa cache
- Singleflight chính xác theo key bầu một owner giải mã duy nhất và khiến các caller trùng lặp chờ cùng một kết quả đã hoàn thành
ImageCacheMaxBytesđã cấu hình, giới hạn số mục và giới hạn theo từng mục vẫn toàn cục xuyên suốt mọi shard- Các mục ảnh đã giải mã giữ handle đếm tham chiếu bất biến sống sót qua việc loại bỏ và cho renderer vẽ các hit ấm mà không cần hiện thực một bản sao
TBitmap - Ảnh hoàn tất được sao chép vào các thể hiện
TBitmapdo caller sở hữu nên caller không thể sửa các pixel cache được giữ lại - Nạp lại tài liệu và vô hiệu hóa cache ảnh sẽ xóa các mục hoàn tất trong khi các đối tượng flight đang hoạt động giữ vòng đời đếm tham chiếu của riêng chúng
GetImageDecodeConcurrencyInfobáo các flight đang hoạt động, các lần giải mã owner đang hoạt động và đỉnh, các lần chờ, hoàn tất và thất bại
Cache transform ICC
HPDFICC chia sẻ các transform nguồn-sang-sRGB hoàn chỉnh qua một cache LRU có trọng số 64 MiB an toàn luồng, gồm cả profile proof và output khi được cấu hình
- Khóa SHA-256 phủ toàn bộ nội dung nguồn, profile proof và output, rendering intent hiệu lực và cài đặt bù điểm đen
HPDFGetICCTransformCacheInfobáo hit, trượt, loại bỏ, từ chối, số mục, byte hiện tại và byte tối đaHPDFSetICCTransformCacheMaxBytesáp một ngân sách toàn tiến trình mới ngay lập tức và loại bỏ các transform ít dùng nhất khi cầnHPDFClearICCTransformCachegiải phóng các transform giữ lại và đặt lại thống kê yêu cầu mà không làm mất hiệu lực các interface transform caller đang giữ
Cache font-subset bền vững
Đặt THotPDF.FontSubsetCacheFolder để bật các kết quả subset TrueType và OpenType tái sử dụng được trong khi EnableFontSubsetting đang hoạt động
- Khóa phủ các byte font gốc, bitmap glyph đã dùng chính xác, chế độ compact hoặc sparse, và phiên bản schema cache
- Cả đường font-store GDI thường lẫn finalizer font Unicode đã đăng ký đều dùng chung một cache
- Các mục PDF/A dạng compact giữ lại ánh xạ GID cũ-mới và số glyph mới mà
CIDToGIDMapcần - Các mục được xác thực trước khi dùng, mục hỏng bị xóa, và việc thay thế dùng một phép di chuyển nguyên tử trong cùng thư mục
FontSubsetCacheMaxBytesáp ngay lập tức và loại bỏ các tệp cache chính xác ít được truy cập nhất mà không đi qua các thư mục không liên quanGetFontSubsetCacheInfobáo hit, trượt, ghi, loại bỏ, hỏng, từ chối, lỗi ghi, byte và tệpClearFontSubsetCachechỉ gỡ các mục font-subset và các mục tạm bị bỏ rơi khỏi thư mục đã cấu hình
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Cache trang đã kết xuất bền vững
Đặt THotPDF.RenderCacheFolder để bật tầng đĩa dùng sau cache trang đã kết xuất trong bộ nhớ
- Các tệp trang được khóa theo nội dung tài liệu, chỉ số trang tính từ 0, DPI, trạng thái hiển thị optional-content hiệu lực, color intent và chính sách dự phòng
- Thay đổi layer và color-intent chọn các biến thể trạng thái tái sử dụng thay vì vứt bỏ mọi bitmap đã cache
- Các cập nhật PNG và chỉ mục là nguyên tử, và các tệp tạm bị bỏ rơi được dọn trong lúc phục hồi
- Các lần đọc trang làm mới mức mới dùng của trang, còn các giới hạn số tài liệu, số trang và byte loại bỏ dữ liệu ít dùng nhất
- Thu nhỏ một giới hạn đã cấu hình sẽ hội tụ ngay thay vì chờ một lần ghi sau
- Tệp PNG hỏng, hàng chỉ mục cũ hoặc trùng, thư mục bị thiếu và thư mục cache chưa lập chỉ mục được tự sửa
- Khóa tài liệu và tọa độ không hợp lệ bị từ chối trước khi đụng tới filesystem
- Thư mục tài liệu dạng liên kết được bỏ qua trong quá trình phục hồi, đọc, ghi, vô hiệu hóa, và loại bỏ; liên kết cùng các file đích bên ngoài của chúng được giữ nguyên
Quyền sở hữu
THPDFWeightedCachesở hữu các giá trị được truyền choPuttrừ khi một giá trị được trả về bởiExtractTHPDFDiskPageCache.Lookuptrả về một bitmap mới cấp phát thuộc sở hữu của bên gọi- Các giá trị bitmap được truyền cho
THPDFDiskPageCache.Storevẫn thuộc sở hữu của bên gọi
API liên quan
- 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