Инфраструктура за кеширане
HotPDF предоставя ограничен претеглен кеш в паметта за повтарящи се междинни обекти и постоянен кеш за рендерирани страници, използван при рендиране на заредени документи
Претеглен кеш в паметта
THPDFWeightedCache в HPDFCache притежава стойности TObject, индексира ги по AnsiString и изтрива най-малко наскоро използваните стойности, докато общото им тегло се побира в MaxBytes
GetиTryGetповишават попадението до най-наскоро използвано и обновяват статистиката за заявкитеPeekиContainsKeyпроверяват записи, без да променят давността или статистиката на заявкитеPutпоема собствеността, заменя съществуващ ключ на място и безопасно приема отново същия обект, когато се променя само неговото теглоRemoveосвобождава запис, докатоExtractпрехвърля собствеността към извикващия- Намаляването на
MaxBytesизтрива записи незабавно, аTrimToBudgetпредоставя същата операция за сближаване изрично Hits,Misses,HitRate,Evictions,RejectionsиReplacementsразкриват поведението на кеша, докатоResetStatisticsстартира нов интервал за измерване- Капацитетът на слотовете расте геометрично, а живите записи остават свързани в ред на давност с постоянно време
Ключове за съдържание
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Двете функции връщат един и същ ключ с малки букви SHA-256 в шестнадесетичен вид за едно и също съдържание
HPDFCacheKeyOfStream хешира, без да заделя втори масив от байтове с пълен размер, чете потоци с възможност за търсене от позиция нула и възстановява първоначалната им позиция
Постоянен кеш за рендерирани страници
Задайте THotPDF.RenderCacheFolder, за да разрешите дисковото ниво, използвано след кеша за рендерирани страници в паметта
- Файловете за страници са ключирани по съдържанието на документа, базирания на нула индекс на страницата и DPI
- Обновленията на PNG и индекса са атомарни, а изоставените временни файлове се премахват по време на възстановяване
- Четенето на страници обновява давността на ниво страница, докато ограничения за брой документи, брой страници и байтове изтриват най-малко наскоро използваните данни
GetLoadedFontDecoderправи дълбоко копие на управляваните масиви, така че извикващият не може да мутира кеширани съпоставки или ширини- Презареждане на документ, мутация на графа, инвалидация на страница, JSON Patch и всяко задаване на
CMapResourcePathизчистват задържаните декодери - Доставянето на декодер се сериализира на документ, за да не се парсва един шрифт двукратно, но заключването не прави безопасна едновременната мутация на документа
GetLoadedFontDecoderCacheInfoизлага записи, оценени байтове, бюджет, попадения, пропуски, парсвания, изхвърляния и инвалидираня
Шардиран кеш за декодиране на заредени изображения
Всяка инстанция THotPDF координира преизползването на декодиране на заредени изображения чрез 16 независимо заключвани метаданни shard-ове
- Търсенето в кеша и допускането държат само избрания shard, докато скъпите декодиране на филтри и изображения вървят извън заключванията на кеша
- Точен per-key singleflight избира един собственик на декодиране и кара дублиращите извикващи да чакат същия завършен резултат
- Настроените
ImageCacheMaxBytes, лимит на брой записи и лимит на запис остават глобални за всички shard-ове - Записите на декодирани изображения държат неизменими handles с брояч на препратките, които оцеляват след eviction и позволяват на рендерите да рисуват топки попадения, без да създават копие
TBitmap - Завършените изображения се копират в инстанции на
TBitmap, притежавани от извикващия, така че извикващият не може да мутира задържаните кеш пиксели - Презареждането на документ и инвалидацията на кеша с изображения изчистват завършените записи, докато активните flight обекти запазват собствения си живот с брояч на препратките
GetImageDecodeConcurrencyInfoдокладва активни flight-ове, активни и пикови собствени декодираня, чакания, завършвания и провали
Кеш на ICC трансформации
HPDFICC споделя пълни трансформации от източник към sRGB чрез thread-safe претеглен LRU кеш от 64 MiB, включително proof и output профили, когато са настроени
- Ключът SHA-256 покрива пълното съдържание на източника, доказателството и изходния профил, ефективния rendering intent и настройката за компенсация на черната точка
HPDFGetICCTransformCacheInfoдокладва попадения, пропуски, изхвърляния, отхвърляния, брой записи, текущи и максимални байтовеHPDFSetICCTransformCacheMaxBytesприлага нов бюджет за целия процес мигновено и изхвърля най-отдавна използваните трансформации при нуждаHPDFClearICCTransformCacheосвобождава задържани трансформации и нулира статистиките на заявки, без да инвалидира трансформационни интерфейси, вече задържани от извикващи
Постоянен кеш на шрифтови подмножества
Задайте THotPDF.FontSubsetCacheFolder, за да включите преизползваеми резултати от TrueType и OpenType subsetting, докато EnableFontSubsetting е активен
- Ключът покрива оригиналните шрифтови байтове, точната bitmap на използваните глифове, компактен или разреден режим и версията на схемата на кеша
- И нормалният път на GDI хранилището на шрифтове, и финализаторът на регистриран Unicode шрифт преизползват същия кеш
- Компактните PDF/A записи запазват картата стар-нов GID и новия брой глифове, нужни на
CIDToGIDMap - Записите се валидират преди употреба, повредените се премахват, а замяната използва атомарно преместване в същата директория
FontSubsetCacheMaxBytesсе прилага мигновено и изхвърля най-отдавна достъпните точни файлове от кеша, без да обхожда несвързани папкиGetFontSubsetCacheInfoдокладва попадения, пропуски, записвания, изхвърляния, повреди, отхвърляния, провалени записвания, байтове и файловеClearFontSubsetCacheпремахва само записи на шрифтови подмножества и изоставени временни записи от настроената папка
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Постоянен кеш на рендирани страници
Задайте THotPDF.RenderCacheFolder, за да включите дисковия слой, използван след кеша на рендирани страници в паметта
- Страничните файлове се ключуват по съдържание на документа, индекс на страница от нулата, DPI, ефективна видимост на optional content, цветови intent и резервна политика
- Промените на слой и цветови intent избират преизползваеми варианти на състоянието, вместо да изхвърлят всеки кеширан bitmap
- PNG и индексните обновявания са атомарни, а изоставените временни файлове се премахват при възстановяване
- Четенията на страница обновяват актуалността на ниво страница, докато лимитите на брой документи, брой страници и байтове изхвърлят най-отдавна използваните данни
- Намаляването на настроен лимит се съобразява мигновено, вместо да чака по-късен запис
- Повредени PNG файлове, остарели или дублирани редове в индекса, липсващи папки и неиндексирани папки на кеша се поправят автоматично
- Невалидни ключове и координати на документи се отхвърлят преди достъп до файловата система
- Свързаните папки на документи се пропускат при възстановяване, четене, запис, отмяна на валидност и изхвърляне; връзките и техните външни целеви файлове се запазват
Собственост
THPDFWeightedCacheпритежава стойностите, подадени наPut, освен ако стойността не е върната чрезExtractTHPDFDiskPageCache.Lookupвръща новозаделено изображение, притежавано от извикващия- Стойностите за изображения, подадени на
THPDFDiskPageCache.Store, остават в собственост на извикващия
Свързани API
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Диагностика на рендиране и телеметрия на операциите