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
- Chybienie pamięci podręcznej rozszerza się do wyrównanego bloku obejmującego żądane bajty, więc sąsiednie odczyty parsera dzielą jedno żądanie magazynu bazowego
- Pamięć podręczna egzekwuje niezależne limity łącznych bajtów, per wpis oraz opcjonalnej liczby wpisów, a zbyt duży zakres omija retencję
- Adaptacyjne przyjmowanie łączy porządek najrzadziej używanych z ograniczonym szkicem częstotliwości ze starzeniem, więc zimne skany czytają wprost, bez wypierania gorętszych zatrzymanych zakresów
- Gdy rzadkie źródło nie potrafi dostarczyć rozszerzonego bloku, opakowanie robi fallback do dokładnie dostępnego żądanego zakresu
- Dostęp do źródła jest serializowany, więc istniejące podklasy nie muszą stawać się wątkowo bezpieczne
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