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
- Neúspech vo vyrovnávacej pamäti sa rozšíri na zarovnaný blok pokrývajúci požadované bajty, takže susedné čítania parsera zdieľajú jednu požiadavku na úložisko
- Vyrovnávacia pamäť vynucuje nezávislé limity celkových bajtov, na položku a voliteľný počet položiek, a nadmerne veľký rozsah obchádza uchovávanie
- Adaptívne prijímanie kombinuje poradie najmenej nedávno použitých s ohraničeným frekvenčným prehľadom starnutia, takže studené prehľady čítajú priamo bez nahrádzania teplejších uchovaných rozsahov
- Keď riedky zdroj nemôže poskytnúť rozšírený blok, obal sa vráti na presne dostupný požadovaný rozsah
- Prístup k zdroju je serializovaný, takže existujúce podtriedy sa nemusia stať vláknovo bezpečnými
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