Cache Infrastructure
HotPDF حافظهٔ نهان محدودشدهٔ حافظه بهعلاوهٔ حافظههای نهان پایدار برای زیرمجموعههای فونت و صفحات رندرشدهٔ قابل استفادهٔ مجدد فراهم میکند
حافظهٔ نهان وزندار حافظه
THPDFWeightedCache در HPDFCache مالک مقادیرِ TObject است، آنها را بر اساس AnsiString ایندکس میکند و کمتربهکاررفتهترین مقادیر را تا جا شدن وزن ترکیبی در MaxBytes جای میگیرد
GetTryGetو یک برخورد را به Recently Used ارتقا میدهند و آمار درخواست را بهروزرسانی میکنندPeekContainsKeyو بدون تغییر recency یا آمار درخواست، مدخلها را بازرسی میکنندPutمالکیت میگیرد، کلید موجود را در جا جایگزین میکند و وقتی فقط وزنش تغییر کرده باشد، همان شیء را با امنیت دوباره میپذیردRemoveExtractیک مدخل را آزاد میکند، در حالی که مالکیت را به فراخواننده منتقل میکند- کوچککردن
MaxBytesمدخلها را فوراً تخلیه میکند وTrimToBudgetهمان عملیات همگرایی را صراحتاً در معرض دید میگذارد HitsMisses،HitRate،Evictions،Rejections،ReplacementsوResetStatisticsرفتار حافظهٔ نهان را در معرض دید میگذارند و یک بازهٔ اندازهگیری جدید آغاز میکند- ظرفیت خانهها بهصورت هندسی رشد میکند و مدخلهای زنده با ترتیب recency در زمان ثابت پیوند میمانند
کلیدهای محتوا
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
هر دو تابع برای محتوای یکسان، همان کلید شانزدهگانیِ lowercaseِ SHA-256 را برمیگردانند
HPDFCacheKeyOfStream بدون تخصیص آرایهٔ بایتی دومِ تماماندازه هش میکند، جریانهای seekable را از موقعیت صفر میخواند و موقعیت اصلیشان را بازیابی میکند
حافظهٔ نهان کدگشای فونت بارگذاریشده
هر نمونهٔ THotPDF کدگشاهای فونت بارگذاریشدهٔ با تجزیهٔ موفق را در یک حافظهٔ نهان LRU وزندار محلیسند نگه میدارد
- بودجهٔ پیشفرض 32 MiB با حد سخت 128 مدخل است و بودجهٔ صفر بایتی نگهداری را غیرفعال میکند
- دیکشنریهای فونت غیرمستقیم مشترک حتی وقتی صفحات از نامهای منبع متفاوت استفاده کنند، یک هستهٔ تجزیهشدهٔ مشترک بین صفحات به کار میبرند
- استخراج متن، صادرات SVG، جایگزینی متن بارگذاریشده و درخواستهای صریح کدگشا همه از یک حافظهٔ نهان استفاده میکنند
GetLoadedFontDecoderآرایههای مدیریتشده را کپی عمیق میکند تا فراخواننده نتواند نگاشتها یا عرضهای ذخیرهشده را تغییر دهد- بارگذاری مجدد سند، تغییر گراف، باطلسازی صفحه، JSON Patch و هر انتساب
CMapResourcePathکدگشاهای نگهداشتهشده را پاک میکند - بهدستآوردن کدگشا برای هر سند سری میشود تا تجزیهٔ تکراری یک فونت رخ ندهد، اما قفل، تغییر همزمان امن سند را تضمین نمیکند
GetLoadedFontDecoderCacheInfoمدخلها، بایتهای تخمینی، بودجه، برخوردها، خطاها، تجزیهها، تخلیهها و باطلسازیها را در معرض دید میگذارد
حافظهٔ نهان شارد کدگشایی تصویر بارگذاریشده
هر نمونهٔ THotPDF استفادهٔ مجدد از کدگشایی تصویر بارگذاریشده را از طریق 16 شارد فراداده با قفل مستقل هماهنگ میکند
- جستوجو و پذیرش در حافظهٔ نهان فقط شارد انتخابشده را قفل میکند، در حالی که کدگشایی پرهزینهٔ فیلتر و تصویر بیرون قفلهای حافظهٔ نهان اجرا میشود
- یک singleflight دقیق هر کلید، یک مالک کدگشایی انتخاب میکند و فراخوانندههای تکراری را وادار میکند منتظر همان نتیجهٔ تکمیلشده بمانند
-
ImageCacheMaxBytesپیکربندیشده، حد شمار مدخل و حد هر مدخل در همهٔ شاردها سراسری میمانند - مدخلهای تصویر کدگشاییشده دستگیرههای شمارشارجاع تغییرناپذیری دارند که از تخلیه جان سالم به در میبرند و به رندرکنندهها اجازه میدهند برخوردهای گرم را بدون مادیسازی کپی
TBitmapترسیم کنند - تصاویر کاملشده به نمونههای
TBitmapدر مالکیت فراخواننده کپی میشوند تا فراخواننده نتواند پیکسلهای حافظهٔ نهان را تغییر دهد - بارگذاری مجدد سند و باطلسازی حافظهٔ نهان تصویر، مدخلهای کاملشده را پاک میکنند، در حالی که اشیاء در حال پرواز عمر شمارشارجاع خودشان را نگه میدارند
GetImageDecodeConcurrencyInfoپروازهای فعال، کدگشاییهای مالکِ فعال و اوج، انتظارها، تکمیلها و شکستها را گزارش میکند
حافظهٔ نهان تبدیل ICC
HPDFICC تبدیلهای کامل مبدأبهsRGB را از طریق یک حافظهٔ نهان LRU وزندار 64 MiBِ امن برای نخ به اشتراک میگذارد، شامل پروفایلهای proof و خروجی در صورت پیکربندی
- کلید SHA-256 کل مبدأ، محتوای پروفایلهای proof و خروجی، هدف رندر مؤثر و تنظیم جبرانسازی نقطهٔ سیاه را پوشش میدهد
HPDFGetICCTransformCacheInfoبرخوردها، خطاها، تخلیهها، ردّها، شمار مدخل، بایت فعلی و بایت بیشینه را گزارش میکندHPDFSetICCTransformCacheMaxBytesبودجهٔ سراسری فرآیند جدید را فوراً اعمال و در صورت نیاز کمترusedترین تبدیلها را تخلیه میکندHPDFClearICCTransformCacheتبدیلهای نگهداشتهشده را آزاد و آمار درخواست را بازنشانی میکند بدون آنکه رابطهای تبدیلِ در اختیار فراخوانندهها را باطل کند
حافظهٔ نهان پایدار زیرمجموعهٔ فونت
برای فعالکردن نتایج زیرمجموعهٔ قابل استفادهٔ مجدد TrueType و OpenType وقتی THotPDF.FontSubsetCacheFolder فعال است، EnableFontSubsetting را تنظیم کنید
- کلید، بایتهای اصلی فونت، بیتنگاشت دقیق گلیفهای استفادهشده، حالت فشرده یا پراکنده و نسخهٔ الگوی حافظهٔ نهان را پوشش میدهد
- هم مسیر عادی فروشگاه فونت GDI و هم نهاییساز فونت یونیکد ثبتشده از یک حافظهٔ نهان استفاده میکنند
- مدخلهای فشردهٔ PDF/A نگاشت GID قدیمبهجدید و شمار گلیف جدید مورد نیاز
CIDToGIDMapرا حفظ میکنند - مدخلها پیش از استفاده اعتبارسنجی میشوند، مدخلهای خراب حذف میشوند و جایگزینی از طریق جابهجایی اتمیک همپوشه انجام میشود
FontSubsetCacheMaxBytesفوراً اعمال میشود و دقیقترین فایلهای حافظهٔ نهانِ کمترused را بدون پیمایش پوشههای بیربط تخلیه میکندGetFontSubsetCacheInfoبرخوردها، خطاها، نوشتهها، تخلیهها، خرابیها، ردّها، شکستهای نوشتن، بایتها و فایلها را گزارش میکندClearFontSubsetCacheفقط مدخلهای زیرمجموعهٔ فونت و مدخلهای موقت رهاشده را از پوشهٔ پیکربندیشده حذف میکند
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
حافظهٔ نهان پایدار صفحهٔ رندرشده
برای فعالکردن لایهٔ دیسکی که پس از حافظهٔ نهان درونحافظهای صفحههای رندرشده استفاده میشود، THotPDF.RenderCacheFolder را تنظیم کنید
- فایلهای صفحه با محتوای سند، اندیس صفحهٔ مبنای صفر، DPI، دیدهشدنی مؤثر محتوای اختیاری، هدف رنگ و سیاست جایگزین کلید میخورند
- تغییرهای لایه و هدف رنگ بهجای دور انداختن همهٔ بیتمپهای ذخیرهشده، واریانتهای وضعیتِ قابل استفادهٔ مجدد انتخاب میکنند
- PNG و بهروزرسانی ایندکس اتمیکاند و فایلهای موقت رهاشده در حین بازیابی حذف میشوند
- خواندن صفحه recency سطح صفحه را تازه میکند، در حالی که حد شمار سند، شمار صفحه و بایت، کمترusedترین داده را تخلیه میکند
- کوچککردن حد پیکربندیشده فوراً همگرا میشود بهجای انتظار برای نوشتن بعدی
- فایلهای PNG خراب، ردیفهای ایندکس کهنه یا تکراری، پوشههای غایب و پوشههای حافظهٔ نهان بدون ایندکس بهطور خودکار ترمیم میشوند
- کلیدها و مختصات سند نامعتبر پیش از دسترسی به فایلسیستم رد میشوند
- پوشههای سندِ پیوندشده در بازیابی، خواندنها، نوشتنها، باطلسازی و اخراج نادیده گرفته میشوند؛ پیوندها و فایلهای هدف بیرونیشان حفظ میشوند
مالکیت
THPDFWeightedCacheمالک مقادیر دادهشده بهPutاست مگر مقداری توسطExtractبرگردانده شودTHPDFDiskPageCache.Lookupبیتمپ تازهتخصیصیافتهای در مالکیت فراخواننده برمیگرداند- مقادیر بیتمپی که به
THPDFDiskPageCache.Storeداده میشوند در مالکیت فراخواننده میمانند
APIهای مرتبط
- Persistent Font-Subset Cache
- THotPDF.LoadedFontDecoderCacheMaxBytes
- THotPDF.GetLoadedFontDecoderCacheInfo
- Sharded Loaded-Image Decode Cache
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- تشخیصهای رندر و تلهمتری عملیات