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

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

Kapcsolódó API-k