THPDFCoalescingRandomAccessSource Class

Avvolge qualsiasi THPDFRandomAccessSource con caching limitata degli intervalli e prefetch asincrono consapevole della cancellazione

Dichiarazione

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;

Coalescing degli intervalli

Prefetch asincrono e cancellazione

PrefetchRange schedula un intervallo in background e sostituisce una richiesta precedente non correlata

Un cache miss in primo piano fuori dall'intervallo attivo cancella il worker prima di acquisire il lock della sorgente, permettendo a un transport cooperativo di cedere prontamente all'operazione visibile

Fai override di THPDFRandomAccessSource.ReadAtCancellable per ispezionare il THPDFCancellationToken fornito durante l'I/O di rete o storage; l'implementazione ereditata controlla la cancellazione immediatamente prima e dopo ReadAt

Imposta AsyncPrefetchEnabled a False quando la politica del transport vieta l'accesso in background

Read-ahead adattivo

Lo stream del parser chiama ObserveReadPattern dopo ogni lettura riuscita; le letture in avanti sostenute crescono la finestra di read-ahead attraverso 1, 2, 4 e 8 blocchi, mentre un seek o un accesso all'indietro sopprime subito il transport speculativo

SequentialReadToleranceBytes accetta piccoli gap in avanti come accesso sequenziale e vale 4096 byte per default; MaxReadAheadBlocks limita la finestra adattiva da 1 a 32 blocchi con default 8

La finestra effettiva è limitata anche da MaxCacheBytes, quindi il read-ahead non può superare intenzionalmente la capacità di cache configurata; la confidenza sequenziale si recupera gradualmente dopo un salto casuale

Imposta AdaptiveReadAheadEnabled a False per un prefetch fisso a un blocco mantenendo il transport asincrono

Statistiche

TransferAt acquisisce i riferimenti dei blocchi di cache retained e li scrive nella destinazione senza allocare né riempire un buffer di lettura intermedio

THPDFRangeCacheStatistics riporta conteggio e byte delle letture della sorgente di backing, hit e miss della cache, ammissioni, rifiuti ed evizioni della cache, ammissioni, rifiuti e aging per frequenza, richieste, completamenti e cancellazioni di prefetch, letture sequenziali e casuali, prefetch soppressi, blocchi di read-ahead correnti e di picco, chiamate e byte di transfer diretto, più conteggio e byte degli intervalli correnti in cache

Proprietà

Quando OwnsSource è True, distruggere il wrapper cancella e attende il worker, rilascia gli intervalli in cache e libera la sorgente avvolta

API correlate