THPDFCoalescingRandomAccessSource Class

Omhult elke THPDFRandomAccessSource met begrensde bereik-caching en annuleringsbewuste asynchrone prefetch

Declaratie

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;

Bereik-samenvoeging

Asynchrone prefetch en annulering

PrefetchRange plant één achtergrondbereik en vervangt een niet-gerelateerd eerder verzoek

Een voorgrond-cachemisser buiten het actieve bereik annuleert de worker voordat de bronvergrendeling wordt verkregen, zodat een coöperatief transport snel kan toegeven aan de zichtbare bewerking

Overschrijf THPDFRandomAccessSource.ReadAtCancellable om het meegeleverde THPDFCancellationToken te inspecteren tijdens netwerk- of opslag-I/O; de overgeërfde implementatie controleert annulering onmiddellijk vóór en na ReadAt

Stel AsyncPrefetchEnabled in op False wanneer het transportbeleid achtergrondtoegang verbiedt

Adaptief vooruitlezen

De parserstroom roept ObserveReadPattern aan na elke geslaagde leesbewerking; aanhoudende voorwaartse leesbewerkingen vergroten het vooruitleesvenster via 1, 2, 4 en 8 blokken, terwijl een seek of achterwaartse toegang speculatief transport onmiddellijk onderdrukt

SequentialReadToleranceBytes accepteert kleine voorwaartse hiaten als sequentiële toegang en is standaard 4096 bytes; MaxReadAheadBlocks begrenst het adaptieve venster van 1 tot 32 blokken en is standaard 8

Het effectieve venster wordt ook begrensd door MaxCacheBytes, zodat vooruitlezen de geconfigureerde cachecapaciteit niet opzettelijk kan overschrijden; sequentieel vertrouwen herstelt geleidelijk na een willekeurige sprong

Stel AdaptiveReadAheadEnabled in op False voor vaste prefetch van één blok terwijl asynchroon transport behouden blijft

Statistieken

TransferAt verkrijgt verwijzingen naar bewaarde cacheblokken en schrijft deze naar de bestemming zonder een tussenliggende leesbuffer toe te wijzen of te vullen

THPDFRangeCacheStatistics rapporteert het aantal leesbewerkingen en bytes van de onderliggende bron, cachehits en -missers, cachetoelatingen, -afwijzingen en -verwijderingen, frequentietoelatingen, -afwijzingen en -veroudering, prefetch-verzoeken, -voltooiingen en -annuleringen, sequentiële en willekeurige leesbewerkingen, onderdrukte prefetches, huidige en piek-vooruitleesblokken, directe overdrachtsaanroepen en -bytes, plus het huidige aantal en aantal bytes van gecachte bereiken

Eigendom

Wanneer OwnsSource True is, annuleert en voegt het vernietigen van de omhulling de worker samen, geeft gecachte bereiken vrij en bevrijdt de omhulde bron

Gerelateerde API's