THPDFCoalescingRandomAccessSource Class

Pakker inn enhver THPDFRandomAccessSource med avgrenset rekkevidde-bufring og kanselleringsbevisst asynkron forhåndshenting

Deklarasjon

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;

Rekkeviddesammenslåing

Asynkron forhåndshenting og kansellering

PrefetchRange planlegger én bakgrunnsrekkevidde og erstatter en urelatert tidligere forespørsel

En cache-miss i forgrunnen utenfor den aktive rekkevidden kansellerer arbeideren før kilde-låsen hentes, slik at en kooperativ transport kan gi plassen raskt til den synlige operasjonen

Overstyr THPDFRandomAccessSource.ReadAtCancellable for å inspisere den medfølgende THPDFCancellationToken under nettverks- eller lagrings-I/O; den nedarvede implementasjonen sjekker kansellering umiddelbart før og etter ReadAt

Angi AsyncPrefetchEnabled til False når transport-policy forbyr bakgrunnsadgang

Adaptiv read-ahead

Parser-strømmen kaller ObserveReadPattern etter hver vellykket lesing; vedvarende fremoverlesinger vokser read-ahead-vinduet gjennom 1, 2, 4 og 8 blokker, mens et seek eller en bakovertilgang umiddelbart undertrykker spekulativ transport

SequentialReadToleranceBytes godtar små fremovergap som sekvensiell tilgang og har standarden 4096 byte; MaxReadAheadBlocks begrenser det adaptive vinduet fra 1 til 32 blokker og har standarden 8

Det effektive vinduet begrenses også av MaxCacheBytes, så read-ahead ikke kan overstige den konfigurerte cache-kapasiteten med vilje; sekvensiell tillit gjenopprettes gradvis etter et tilfeldig hopp

Angi AdaptiveReadAheadEnabled til False for fast én-blokks forhåndshenting mens du beholder asynkron transport

Statistikk

TransferAt henter bevarte cache-blokkreferanser og skriver dem til destinasjonen uten å tildele eller fylle en mellomliggende lesebuffer

THPDFRangeCacheStatistics rapporterer leseantall og -byte fra lagrings-kilden, cache-treff og -miss, cache-opptak, avvisninger og utkastinger, frekvens-opptak, avvisninger og aldring, forhåndshente-forespørsler, fullføringer og kanselleringer, sekvensielle og tilfeldige lesinger, undertrykte forhåndshentinger, nåværende og topp read-ahead-blokker, direkte overføringskall og -byte, samt nåværende bufret rekkeviddeantall og -byte

Eierskap

Når OwnsSource er True, ødelegger innpakningen arbeideren sin og venter på den, frigjør bufrede rekkevidder og frigjør den innpakkede kilden

Relaterte API-er