THPDFCoalescingRandomAccessSource osztály
Bármely THPDFRandomAccessSource forrást korlátozott tartomány-gyorsítótárazással és megszakítás-tudatos aszinkron előtöltéssel burkol
Deklaráció
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;
Tartomány-egyesítés
- A gyorsítótár-miss egy igazított blokkra bővül, amely lefedi a kért bájtokat, így a szomszédos elemzői olvasások egy háttértár-kérést osztanak meg
- A gyorsítótár független összbájt-, bejegyzésenkénti és opcionális bejegyzésszám-korlátokat kényszerít ki, és a túlméretezett tartomány kikerüli a megőrzést
- Az adaptív befogadás a legutóbb használt sorrendet egy korlátozott öregedő gyakoriság-vázlattal kombinálja, így a hideg beolvasások közvetlenül olvasnak anélkül, hogy a forróbb megőrzött tartományokat helyettesítenék
- Ha egy ritka forrás nem tud bővített blokkot biztosítani, a burkoló a pontosan elérhető kért tartományra tér vissza
- A forráshozzáférés szerializált, így a meglévő alosztályoknak nem kell szálbiztossá válniuk
Aszinkron előtöltés és megszakítás
A PrefetchRange egy háttér-tartományt ütemez, és helyettesíti a kapcsolódó korábbi kérést
Az aktív tartományon kívüli előtérbeli gyorsítótár-miss a munkaszálat a forrászár megszerzése előtt megszakítja, így az együttműködő átvitel gyorsan átadhatja a vezérlést a látható műveletnek
Írja felül a THPDFRandomAccessSource.ReadAtCancellable metódust, hogy a megadott THPDFCancellationToken tokent ellenőrizze hálózati vagy tárolási I/O közben; az örökölt implementáció közvetlenül a ReadAt előtt és után ellenőrzi a megszakítást
Állítsa a AsyncPrefetchEnabled értéket False értékre, ha az átviteli szabályzat tiltja a háttér-hozzáférést
Adaptív előreolvasás
Az elemzői adatfolyam minden sikeres olvasás után meghívja az ObserveReadPattern metódust; a folyamatos előre irányuló olvasások az előreolvasási ablakot 1, 2, 4 és 8 blokkon keresztül növelik, míg egy keresés vagy hátrafelé irányuló hozzáférés azonnal elnyomja a spekulatív átvitelt
A SequentialReadToleranceBytes kis előre irányuló réseket szekvenciális hozzáférésként fogad el, és alapértelmezés szerint 4096 bájt; a MaxReadAheadBlocks az adaptív ablakot 1 és 32 blokk között korlátozza, és alapértelmezés szerint 8
A tényleges ablakot a MaxCacheBytes is korlátozza, így az előreolvasás szándékosan nem haladhatja meg a konfigurált gyorsítótár-kapacitást; a szekvenciális bizalom egy véletlen ugrás után fokozatosan helyreáll
Állítsa az AdaptiveReadAheadEnabled értéket False értékre a rögzített egyblokkos előtöltéshez, miközben az aszinkron átvitel megmarad
Statisztikák
A TransferAt megszerzi a megőrzött gyorsítótár-blokk referenciákat, és köztes olvasási puffer lefoglalása vagy feltöltése nélkül írja azokat a célhelyre
A THPDFRangeCacheStatistics a háttérforrás-olvasások számát és bájtjait, a gyorsítótár-találatokat és -tévesztéseket, a gyorsítótár-befogadásokat, -elutasításokat és -kiszorításokat, a gyakoriság-befogadásokat, -elutasításokat és -öregedést, az előtöltési kéréseket, -befejezéseket és -megszakításokat, a szekvenciális és véletlen olvasásokat, az elnyomott előtöltéseket, az aktuális és csúcsértékű előreolvasási blokkokat, a közvetlen átviteli hívásokat és bájtokat, valamint az aktuális gyorsítótárazott tartományszámot és -bájtokat jelenti
Tulajdonjog
Ha az OwnsSource értéke True, a burkoló megsemmisítése megszakítja és csatlakoztatja a munkaszálát, felszabadítja a gyorsítótárazott tartományokat, és felszabadítja a burkolt forrást