THPDFCoalescingRandomAccessSource Class

Encapsula qualquer THPDFRandomAccessSource com cache de faixa limitado e pré-busca assíncrona ciente de cancelamento

Declaração

constructor Create(
  ASource: THPDFRandomAccessSource;
  OwnsSource: Boolean = False;
  BlockSize: Integer = 262144;
  MaxCacheBytes: Int64 = 2097152;
  MaxEntryBytes: Int64 = 0;
  MaxCacheEntries: Integer = 0;
  AdaptiveAdmission: Boolean = True);

procedure PrefetchRange(Offset, Count: Int64);
procedure ObserveReadPattern(Offset: Int64; Count: Integer);
function TransferAt(Offset, Count: Int64;
  Destination: TStream): Int64;
procedure CancelPrefetch;
function IsPrefetchActive: Boolean;
procedure ClearCache;
procedure ConfigureCacheAdmission(MaxCacheBytes,
  MaxEntryBytes: Int64; MaxCacheEntries: Integer;
  AdaptiveAdmission: Boolean = True);
procedure GetStatistics(out Statistics: THPDFRangeCacheStatistics);

property BlockSize: Integer;
property MaxCacheBytes: Int64;
property MaxEntryBytes: Int64;
property MaxCacheEntries: Integer;
property AdaptiveAdmissionEnabled: Boolean;
property AsyncPrefetchEnabled: Boolean;
property AdaptiveReadAheadEnabled: Boolean;
property MaxReadAheadBlocks: Integer;
property SequentialReadToleranceBytes: Integer;

Coalescência de faixa

Pré-busca assíncrona e cancelamento

PrefetchRange agenda um trabalho de fundo e substitui uma solicitação anterior não relacionada

Uma falta de cache em primeiro plano fora da faixa ativa cancela o trabalhador antes de adquirir o bloqueio da fonte, permitindo que um transporte cooperativo ceda prontamente à operação visível

Substitua THPDFRandomAccessSource.ReadAtCancellable para inspecionar o THPDFCancellationToken fornecido durante E/S de rede ou armazenamento; a implementação herdada verifica o cancelamento imediatamente antes e depois de ReadAt

Defina AsyncPrefetchEnabled como False quando a política de transporte proibir acesso em segundo plano

Leitura antecipada adaptativa

O fluxo do analisador chama ObserveReadPattern após cada leitura bem-sucedida; leituras diretas sustentadas aumentam a janela de leitura antecipada por meio de 1, 2, 4 e 8 blocos, enquanto uma busca ou acesso para trás suprime imediatamente o transporte especulativo

SequentialReadToleranceBytes aceita pequenas lacunas diretas como acesso sequencial e tem padrão de 4096 bytes; MaxReadAheadBlocks limita a janela adaptativa de 1 a 32 blocos e tem padrão de 8

A janela efetiva também é limitada por MaxCacheBytes, para que a leitura antecipada não possa exceder intencionalmente a capacidade de cache configurada; a confiança sequencial se recupera gradualmente após um salto aleatório

Defina AdaptiveReadAheadEnabled como False para pré-busca fixa de um bloco mantendo o transporte assíncrono

Estatísticas

TransferAt adquire referências de blocos de cache retidos e as grava no destino sem alocar ou preencher um buffer de leitura intermediário

THPDFRangeCacheStatistics relata contagem e bytes de leitura da fonte de apoio, acertos e faltas de cache, admissões, rejeições e remoções de cache, admissões, rejeições e envelhecimento de frequência, solicitações, conclusões e cancelamentos de pré-busca, leituras sequenciais e aleatórias, pré-buscas suprimidas, blocos de leitura antecipada atuais e de pico, chamadas e bytes de transferência direta, além da contagem e bytes atuais de faixas em cache

Propriedade

Quando OwnsSource é True, destruir o encapsulador cancela e une seu trabalhador, libera faixas em cache e libera a fonte encapsulada

APIs relacionadas