THPDFCoalescingRandomAccessSource Class

Opakowuje dowolne THPDFRandomAccessSource w ograniczone buforowanie zakresów i asynchroniczny prefetch świadomy anulowania

Deklaracja

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;

Łączenie zakresów

Asynchroniczny prefetch i anulowanie

PrefetchRange planuje jeden zakres w tle i zastępuje niezwiązane z nim wcześniejsze żądanie

Chybienie pamięci podręcznej na pierwszym planie poza aktywnym zakresem anuluje workera przed przejęciem blokady źródła, dzięki czemu kooperatywny transport szybko ustępuje widocznej operacji

Nadpisz THPDFRandomAccessSource.ReadAtCancellable, aby podglądać dostarczony THPDFCancellationToken podczas I/O sieci albo magazynu; implementacja dziedziczona sprawdza anulowanie bezpośrednio przed i po ReadAt

Ustaw AsyncPrefetchEnabled na False, gdy polityka transportu zabrania dostępu w tle

Adaptacyjny read-ahead

Strumień parsera wywołuje ObserveReadPattern po każdym udanym odczycie; utrzymujące się odczyty w przód rozrastają okno read-ahead przez 1, 2, 4 i 8 bloków, podczas gdy seek albo odczyt wstecz natychmiast tłumi spekulacyjny transport

SequentialReadToleranceBytes traktuje małe luki w przód jako dostęp sekwencyjny i domyślnie wynosi 4096 bajtów; MaxReadAheadBlocks ogranicza adaptacyjne okno do zakresu od 1 do 32 bloków i domyślnie wynosi 8

Efektywne okno ogranicza też MaxCacheBytes, więc read-ahead nie przekroczy celowo skonfigurowanej pojemności pamięci podręcznej; pewność sekwencyjności odbudowuje się stopniowo po losowym skoku

Ustaw AdaptiveReadAheadEnabled na False dla stałego jednoblokowego prefetch przy zachowaniu asynchronicznego transportu

Statystyki

TransferAt przejmuje referencje zatrzymanych bloków pamięci podręcznej i zapisuje je do celu bez alokowania ani wypełniania pośredniego bufora odczytu

THPDFRangeCacheStatistics raportuje liczbę i bajty odczytów źródła bazowego, trafienia i chybienia pamięci podręcznej, przyjęcia, odrzucenia i eksmisje z pamięci podręcznej, przyjęcia, odrzucenia i starzenie wg częstotliwości, żądania, ukończenia i anulowania prefetch, odczyty sekwencyjne i losowe, stłumione prefetch, bieżące i szczytowe bloki read-ahead, wywołania i bajty transferu bezpośredniego, a także bieżącą liczbę i bajty buforowanych zakresów

Własność

Gdy OwnsSource jest True, zniszczenie opakowania anuluje i dołącza workera, zwalnia buforowane zakresy i uwalnia opakowane źródło

Powiązane API