Infraestrutura de cache
O HotPDF fornece caching de memória limitado mais caches persistentes para subsets de fontes reutilizáveis e páginas renderizadas
Cache de memória ponderada
THPDFWeightedCache em HPDFCache é proprietária dos valores TObject, indexa-os por AnsiString e remove os valores usados menos recentemente até o seu peso combinado caber em MaxBytes
GeteTryGetpromovem um acerto para o usado mais recentemente e atualizam as estatísticas de pedidosPeekeContainsKeyinspecionam as entradas sem alterar a recência nem as estatísticas de pedidosPutassume a propriedade, substitui uma chave existente no local e aceita com segurança o mesmo objeto novamente quando apenas o seu peso mudaRemoveliberta uma entrada, enquantoExtracttransfere a propriedade para o chamador- Reduzir
MaxBytesremove entradas imediatamente, eTrimToBudgetexpõe a mesma operação de convergência explicitamente Hits,Misses,HitRate,Evictions,RejectionseReplacementsexpõem o comportamento da cache, enquantoResetStatisticsinicia um novo intervalo de medição- A capacidade dos blocos cresce geometricamente e as entradas ativas permanecem ligadas em ordem de recência de tempo constante
Chaves de conteúdo
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
Ambas as funções devolvem a mesma chave hexadecimal SHA-256 em minúsculas para o mesmo conteúdo
HPDFCacheKeyOfStream calcula o hash sem alocar um segundo vetor de bytes de tamanho completo, lê streams com capacidade de pesquisa a partir da posição zero e restaura a sua posição original
Cache de descodificadores de fontes carregadas
Cada instância de THotPDF retém os descodificadores de fontes carregadas analisados com sucesso numa cache LRU ponderada com âmbito de documento
- O orçamento predefinido é de 32 MiB com um limite rígido de 128 entradas, e um orçamento de zero bytes desativa a retenção
- Dicionários de fontes indiretos partilhados reutilizam um único núcleo analisado entre páginas, mesmo quando as páginas usam nomes de recursos diferentes
- A extração de texto, a exportação SVG, a substituição de texto carregado e os pedidos explícitos de descodificador partilham a mesma cache
GetLoadedFontDecodercopia em profundidade os arrays geridos, para que os chamadores não possam mutar mapeamentos ou larguras em cache- O recarregamento do documento, a mutação do grafo, a invalidação de páginas, o JSON Patch e qualquer atribuição a
CMapResourcePathlimpam os descodificadores retidos - A aquisição de descodificadores é serializada por documento para evitar análise duplicada da mesma fonte, mas o lock não torna segura a mutação concorrente do documento
GetLoadedFontDecoderCacheInfoexpõe entradas, bytes estimados, orçamento, acertos, falhas, análises, remoções e invalidações
Cache fragmentada de descodificação de imagens carregadas
Cada instância de THotPDF coordena a reutilização da descodificação de imagens carregadas através de 16 shards de metadados com locks independentes
- A pesquisa na cache e a admissão retêm apenas o shard selecionado, enquanto a descodificação dispendiosa de filtros e imagens corre fora dos locks da cache
- Um singleflight exato por chave elege um único descodificador proprietário e faz os chamadores duplicados esperarem pelo mesmo resultado concluído
- O
ImageCacheMaxBytesconfigurado, o limite de contagem de entradas e o limite por entrada mantêm-se globais em todos os shards - As entradas de imagens descodificadas retêm handles imutáveis com contagem de referências que sobrevivem à remoção e deixam os renderers desenhar acertos quentes sem materializar uma cópia
TBitmap - As imagens concluídas são copiadas para instâncias de
TBitmapdo chamador, para que este não possa mutar os píxeis retidos na cache - O recarregamento do documento e a invalidação da cache de imagens limpam as entradas concluídas, enquanto os objetos de voo ativos retêm o seu próprio ciclo de vida com contagem de referências
GetImageDecodeConcurrencyInfoinforma voos ativos, descodificações de proprietários ativas e no pico, esperas, conclusões e falhas
Cache de transformações ICC
HPDFICC partilha transformações completas de origem para sRGB através de uma cache LRU ponderada thread-safe de 64 MiB, incluindo perfis de proof e de saída quando configurados
- A chave SHA-256 cobre o conteúdo completo dos perfis de origem, proof e saída, a intenção de renderização efetiva e a definição de compensação de ponto preto
HPDFGetICCTransformCacheInfoinforma acertos, falhas, remoções, rejeições, contagem de entradas, bytes atuais e bytes máximosHPDFSetICCTransformCacheMaxBytesaplica imediatamente um novo orçamento para todo o processo e remove as transformações usadas menos recentemente conforme necessárioHPDFClearICCTransformCacheliberta as transformações retidas e repõe as estatísticas de pedidos sem invalidar interfaces de transformação já detidas pelos chamadores
Cache persistente de subsets de fontes
Defina THotPDF.FontSubsetCacheFolder para ativar resultados reutilizáveis de subsets TrueType e OpenType enquanto EnableFontSubsetting está ativo
- A chave cobre os bytes originais da fonte, o bitmap exato de glifos usados, o modo compacto ou disperso e a versão do esquema da cache
- Tanto o caminho normal do armazenamento de fontes GDI como o finalizador de fontes Unicode registadas reutilizam a mesma cache
- As entradas compactas de PDF/A preservam o mapa GID antigo-para-novo e a nova contagem de glifos de que o
CIDToGIDMapprecisa - As entradas são validadas antes do uso, as entradas corrompidas são removidas e a substituição usa uma movimentação atómica no mesmo diretório
FontSubsetCacheMaxBytesaplica-se imediatamente e remove os ficheiros exatos da cache acedidos menos recentemente sem percorrer pastas não relacionadasGetFontSubsetCacheInfoinforma acertos, falhas, escritas, remoções, corrupção, rejeições, falhas de escrita, bytes e ficheirosClearFontSubsetCacheremove apenas entradas de subsets de fontes e entradas temporárias abandonadas da pasta configurada
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
Cache persistente de páginas renderizadas
Defina THotPDF.RenderCacheFolder para ativar o nível de disco usado após a cache em memória de páginas renderizadas
- Os ficheiros de página são indexados pelo conteúdo do documento, pelo índice de página baseado em zero, pelos DPI, pela visibilidade efetiva de conteúdo opcional, pela intenção de cor e pela política de fallback
- Mudanças de camada e de intenção de cor selecionam variantes de estado reutilizáveis em vez de descartar todos os bitmaps em cache
- As atualizações de PNG e de índice são atómicas, e os ficheiros temporários abandonados são removidos durante a recuperação
- As leituras de página atualizam a recência ao nível da página, enquanto as contagens de documentos, de páginas e os limites de bytes removem os dados usados menos recentemente
- Reduzir um limite configurado converge imediatamente em vez de aguardar por uma escrita posterior
- Ficheiros PNG corrompidos, linhas de índice obsoletas ou duplicadas, pastas em falta e pastas de cache não indexadas são reparadas automaticamente
- Chaves de documento e coordenadas inválidas são rejeitadas antes do acesso ao sistema de ficheiros
- As pastas de documentos ligados são ignoradas durante a recuperação, as leituras, as escritas, a invalidação e a remoção; as ligações e os respetivos ficheiros alvo externos são preservados
Propriedade e ciclo de vida
- A
THPDFWeightedCacheé proprietária dos valores passados aPut, a menos que um valor seja devolvido porExtract THPDFDiskPageCache.Lookupdevolve um bitmap recentemente alocado cujo proprietário é o chamador- Os valores bitmap passados a
THPDFDiskPageCache.Storepermanecem propriedade do chamador
APIs relacionadas
- Cache persistente de subsets de fontes
- THotPDF.LoadedFontDecoderCacheMaxBytes
- THotPDF.GetLoadedFontDecoderCacheInfo
- Cache fragmentada de descodificação de imagens carregadas
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Diagnósticos de renderização e telemetria de operações