THPDFCoalescingRandomAccessSource Class

Obaluje libovolný THPDFRandomAccessSource ohraničeným kešováním rozsahů a asynchronním přednačítáním citlivým na zrušení

Declaration

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;

Sloučení rozsahů

Asynchronní přednačítání a zrušení

PrefetchRange naplánuje jeden rozsah na pozadí a nahradí nesouvisející dřívější požadavek

Nezásah do keše v popředí mimo aktivní rozsah zruší pracovní vlákno před získáním zámku zdroje, což kooperativnímu transportu umožní rychle ustoupit viditelné operaci

Přepište THPDFRandomAccessSource.ReadAtCancellable, abyste mohli během I/O přes síť nebo úložiště prozkoumat dodaný THPDFCancellationToken; zděděná implementace kontroluje zrušení bezprostředně před ReadAt i po něm

Nastavte AsyncPrefetchEnabled na False, když transportní politika zakazuje přístup na pozadí

Adaptivní předčítání

Stream parseru volá ObserveReadPattern po každém úspěšném čtení; trvalá dopředná čtení zvětšují okno předčítání přes 1, 2, 4 a 8 bloků, zatímco vyhledání nebo čtení dozadu okamžitě potlačí spekulativní transport

SequentialReadToleranceBytes přijímá malé dopředné mezery jako sekvenční přístup a ve výchozím stavu má 4096 bajtů; MaxReadAheadBlocks omezuje adaptivní okno od 1 do 32 bloků a ve výchozím stavu má 8

Efektivní okno je dále omezeno parametrem MaxCacheBytes, takže předčítání nemůže záměrně překročit nakonfigurovanou kapacitu keše; sekvenční jistota se po náhodném skoku obnovuje postupně

Nastavte AdaptiveReadAheadEnabled na False pro pevné předčítání jednoho bloku při zachování asynchronního transportu

Statistika

TransferAt získává odkazy na uchované bloky keše a zapisuje je do cíle bez alokace nebo plnění mezilehlého čtecího bufferu

THPDFRangeCacheStatistics vykazuje počet čtení a bajtů zdrojového úložiště, zásahy a nezásahy keše, přijetí do keše, odmítnutí a vyřazení, frekvenční přijetí, odmítnutí a stárnutí, požadavky přednačítání, jejich dokončení a zrušení, sekvenční a náhodná čtení, potlačená přednačítání, aktuální a špičkový počet bloků předčítání, přímá volání a bajty přenosu plus aktuální počet a velikost kešovaných rozsahů

Vlastnictví

Když je OwnsSource nastaveno na True, zničení obálky zruší a připojí její pracovní vlákno, uvolní kešované rozsahy a uvolní zabalený zdroj

Související API