THotPDF Windowed Local File Mapping
Controla o mapeamento de memória só de leitura, com limites, que LoadFromFile usa em documentos locais grandes
Declarações
property LocalFileMappingThreshold: Int64;
property LocalFileMappingWindowSize: Integer;
property LocalFileMappingCacheWindows: Integer;
property LocalFileMappingAdaptiveGeometry: boolean;
property LastLoadUsedMemoryMapping: boolean;
function GetLastMappedFileStatistics(
out Statistics: THPDFMappedFileStatistics): boolean;
Predefinições
| Definir | Predefinição | Significado |
|---|---|---|
LocalFileMappingThreshold | 8 MiB | Minimum source size that selects memory mapping; zero disables mapping |
LocalFileMappingWindowSize | 16 MiB | Bytes covered by one allocation-granularity-aligned view |
LocalFileMappingCacheWindows | 4 | Número máximo de vistas residentes retidas pela cache LRU |
LocalFileMappingAdaptiveGeometry | True | Redistribui o mesmo limite de bytes mapeados para acesso sequencial ou aleatório sustentado |
Estatísticas
THPDFMappedFileStatistics = record
FileSize: Int64;
ConfiguredWindowSize: Int64;
ConfiguredCacheWindowCount: Integer;
WindowSize: Int64;
CacheWindowCount: Integer;
MappedByteLimit: Int64;
CurrentMappedBytes: Int64;
PeakMappedBytes: Int64;
GeometryChangeCount: Int64;
SequentialReadCalls: Int64;
RandomReadCalls: Int64;
AdaptiveGeometry: Boolean;
SequentialGeometryActive: Boolean;
RandomGeometryActive: Boolean;
ReadCalls: Int64;
BytesRead: Int64;
MapCount: Int64;
CacheHits: Int64;
FallbackReadCalls: Int64;
FallbackBytes: Int64;
DirectTransferCalls: Int64;
DirectTransferBytes: Int64;
end;
GetLastMappedFileStatistics devolve True only when the last LoadFromFile operation selected mapping
MapCount conta as vistas novas e CacheHits conta as leituras servidas por uma vista existente, permitindo que aplicações e benchmarks ajustem a geometria das janelas aos padrões de acesso reais
MappedByteLimit mantém-se fixo, enquanto WindowSize e CacheWindowCount reportam a geometria ativa; os picos de bytes mapeados, as contagens de padrões e os flags de modo tornam cada adaptação observável
Advanced source types
THPDFMappedFileSource é dono do handle de ficheiro partilhado, do objeto de mapeamento, das janelas LRU sincronizadas, da contagem de referências e do caminho de fallback posicional
THPDFMappedFileStream expõe uma fatia limitada, com suporte de seek, dessa origem, enquanto THPDFMappedFileWindow descreve uma vista interna em cache
Comportamento
- As vistas só são mapeadas quando uma leitura alcança o seu intervalo e são removidas por ordem de menos recentemente usada
- Oito observações sustentadas para a frente selecionam janelas sequenciais maiores, enquanto oito observações distantes ou para trás selecionam até 16 janelas de acesso aleatório mais pequenas
- A geometria adaptativa nunca excede o limite de bytes derivado do tamanho configurado e do número de janelas em cache
- As leituras que atravessam a fronteira de uma janela são copiadas em segmentos limitados, sem criar um buffer do ficheiro inteiro
HPDFTransferStreamescreve as fatias mapeadas diretamente a partir de cada janela residente e regista as chamadas e os bytes de transferência direta em separado das leituras do parser- Os streams do parser e os corpos de streams PDF lazy não modificados partilham um único handle de ficheiro, um objeto de mapeamento e uma cache de janelas thread-safe
- A origem permite renomear ou apagar atomicamente o ficheiro enquanto está ativa, e o mapeamento existente mantém uma vista estável dos bytes abertos
- Uma falha na criação do mapeamento seleciona a implementação original com
TFileStream, enquanto uma falha posterior na alocação de vistas faz a origem partilhada passar a leituras posicionais de ficheiro com lock - Window sizes below 64 KiB and cache counts outside 1 through 32 raise
ERangeError
Ver também: LocalFileMappingAdaptiveGeometry, LoadFromFile, Carregamento escalável, HPDFTransferStream, LoadedStreamMemoryThreshold