THPDFCoalescingRandomAccessSource Class

Indpakker enhver THPDFRandomAccessSource med begrænset områdecaching og annulleringsbevidst asynkron forudhentning

Deklaration

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;

Sammenfletning af områder

Asynkron forudhentning og annullering

PrefetchRange planlægger ét baggrundsområde og erstatter en tidligere, ikke-relateret forespørgsel

En cache-miss i forgrunden uden for det aktive område annullerer arbejderen, inden kildelåsen hentes, så en kooperativ transport kan give plads til den synlige operation

Tilsidesæt THPDFRandomAccessSource.ReadAtCancellable for at inspicere den medsendte THPDFCancellationToken under netværks- eller lager-I/O; den nedarvede implementering kontrollerer annullering umiddelbart før og efter ReadAt

Sæt AsyncPrefetchEnabled til False, når transportpolitikken forbyder baggrundsadgang

Adaptiv forudlæsning

Parserstrømmen kalder ObserveReadPattern efter hver vellykket læsning; vedvarende fremadrettede læsninger udvider forudlæsningsvinduet gennem 1, 2, 4 og 8 blokke, mens et seek eller en baglæns læsning straks undertrykker spekulativ transport

SequentialReadToleranceBytes accepterer små fremadrettede huller som sekventiel adgang og er som standard 4096 bytes; MaxReadAheadBlocks begrænser det adaptive vindue fra 1 til 32 blokke og er som standard 8

Det effektive vindue begrænses også af MaxCacheBytes, så forudlæsning ikke bevidst kan overstige den konfigurerede cachekapacitet; sekventiel tillid genopbygges gradvist efter et tilfældigt spring

Sæt AdaptiveReadAheadEnabled til False for fast en-bloks forudhentning, samtidig med at den asynkrone transport bibeholdes

Statistik

TransferAt henter referencer til fastholdte cacheblokke og skriver dem til destinationen uden at allokere eller fylde en mellemliggende læsebuffer

THPDFRangeCacheStatistics rapporterer backing-source-læseantal og -bytes, cache-hits og -misses, cache-optagelser, -afvisninger og -udsmidninger, frekvensoptagelser, -afvisninger og forældelse, forudhentningsforespørgsler, -fuldførelser og -annulleringer, sekventielle og tilfældige læsninger, undertrykte forudhentninger, nuværende og maksimale forudlæsningsblokke, direkte overførselskald og -bytes samt det nuværende antal cachedes områder og bytes

Ejerskab

Når OwnsSource er True, annullerer og forener ødelæggelsen af indpakningen dens arbejder, frigiver cachedes områder og frigør den indpakkede kilde

Relaterede API'er