THPDFCoalescingRandomAccessSource Class

Obaluje akýkoľvek THPDFRandomAccessSource ohraničeným ukladaním rozsahov do vyrovnávacej pamäte a asynchrónnym predbežným načítaním zohľadňujúcim zrušenie

Deklarácia

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;

Zlučovanie rozsahov

Asynchrónne predbežné načítanie a zrušenie

PrefetchRange naplánuje jeden rozsah na pozadí a nahrádza nesúvisiacu skoršiu požiadavku

Neúspech vo vyrovnávacej pamäti popredia mimo aktívneho rozsahu zruší pracovníka pred získaním zámku zdroja, čo kooperatívnemu prenosu umožní promptne ustúpiť viditeľnej operácii

Prekryte THPDFRandomAccessSource.ReadAtCancellable, aby ste počas sieťového alebo úložiskového I/O skúmali dodaný THPDFCancellationToken; zdedená implementácia kontroluje zrušenie bezprostredne pred ReadAt a po ňom

Nastavte AsyncPrefetchEnabled na False, keď politika prenosu zakazuje prístup na pozadí

Adaptívne predbežné čítanie

Tok parsera volá ObserveReadPattern po každom úspešnom čítaní; trvalé dopredné čítania rozširujú okno predbežného čítania cez 1, 2, 4 a 8 blokov, zatiaľ čo vyhľadávanie alebo spätný prístup okamžite potláča špekulatívny prenos

SequentialReadToleranceBytes prijíma malé dopredné medzery ako sekvenčný prístup a predvolene má 4096 bajtov; MaxReadAheadBlocks obmedzuje adaptívne okno od 1 do 32 blokov a predvolene má 8

Efektívne okno je tiež obmedzené MaxCacheBytes, takže predbežné čítanie nemôže zámerne prekročiť nakonfigurovanú kapacitu vyrovnávacej pamäte; sekvenčná dôveryhodnosť sa po náhodnom skoku zotavuje postupne

Nastavte AdaptiveReadAheadEnabled na False pre pevné predbežné načítanie jedného bloku pri zachovaní asynchrónneho prenosu

Štatistiky

TransferAt získava udržiavané referencie blokov vyrovnávacej pamäte a zapisuje ich do cieľa bez alokácie alebo plnenia medziľahlého čítacieho buffera

THPDFRangeCacheStatistics uvádza počet a bajty čítaní zo zdroja úložiska, zásahy a neúspechy vyrovnávacej pamäte, prijatia, odmietnutia a vyradenia z vyrovnávacej pamäte, frekvenčné prijatia, odmietnutia a starnutie, požiadavky predbežného načítania, dokončenia a zrušenia, sekvenčné a náhodné čítania, potlačené predbežné načítania, aktuálne a špičkové bloky predbežného čítania, priame volania a bajty prenosu a aktuálny počet a bajty uložených rozsahov

Vlastníctvo

Keď je OwnsSource True, zničenie obalu zruší a pripojí jeho pracovníka, uvoľní uložené rozsahy a uvoľní obalený zdroj

Súvisiace API