THPDFCoalescingRandomAccessSource Sınıfı

Herhangi bir THPDFRandomAccessSource nesnesini sınırlı range cache'i ve cancellation duyarlı asynchronous prefetch ile sarar

Bildirim

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;

Range coalescing

Asynchronous prefetch ve cancellation

PrefetchRange tek bir arka plan range'i planlar ve ilgisiz önceki request'in yerine geçer

Aktif range dışında kalan ön plan cache miss'i, kaynak kilidi alınmadan worker'ı iptal eder; böylece cooperative bir transport, görünür operation'a hızla yol verir

Ağ ya da depolama I/O'su sırasında verilen THPDFCancellationToken'ı incelemek için THPDFRandomAccessSource.ReadAtCancellable'ı override edin; miras alınan implementation, ReadAt'in hemen öncesinde ve sonrasında cancellation'ı kontrol eder

Transport politikası arka plan erişimine izin vermiyorsa AsyncPrefetchEnabled değerini False yapın

Adaptive read-ahead

Parser stream, her başarılı okumanın ardından ObserveReadPattern'i çağırır; sürekli ileri okumalar read-ahead penceresini 1, 2, 4 ve 8 bloğa doğru büyütür, seek ya da geriye dönük erişim ise spekülatif transport'u anında bastırır

SequentialReadToleranceBytes, küçük ileri boşlukları sıralı erişim sayar ve varsayılanı 4096 byte'dır; MaxReadAheadBlocks ise adaptive pencereyi 1 ile 32 blok arasında sınırlar ve varsayılanı 8'dir

Etkin pencere ayrıca MaxCacheBytes ile sınırlıdır; böylece read-ahead, yapılandırılan cache kapasitesini kasıtlı olarak aşamaz; sıralı güven, rastgele bir sıçramadan sonra kademeli olarak toparlanır

Asynchronous transport'ı korurken sabit tek bloklu prefetch için AdaptiveReadAheadEnabled değerini False yapın

İstatistikler

TransferAt, saklanan cache bloğu referanslarını alır ve ara bir okuma buffer'ı ayırmadan ya da doldurmadan hedefe yazar

THPDFRangeCacheStatistics; backing kaynak okuma sayısını ve byte'larını, cache hit ve miss'lerini, cache admission, ret ve eviction'larını, frequency admission, ret ve aging'i, prefetch request'lerini, tamamlanma ve iptalleri, sıralı ve rastgele okumaları, bastırılan prefetch'leri, güncel ve tepe read-ahead bloklarını, doğrudan transfer çağrılarını ve byte'larını, ayrıca güncel cache'lenmiş range sayısını ve byte'larını raporlar

Sahiplik

OwnsSource değeri True iken wrapper yok edildiğinde worker iptal edilip join edilir, cache'lenmiş range'ler serbest bırakılır ve sarılan kaynak serbest bırakılır

İlgili API'ler