THPDFCoalescingRandomAccessSource Class

Membungkus setiap THPDFRandomAccessSource dengan caching rentang terbatas dan prefetch asinkron sadar pembatalan

Deklarasi

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;

Penggabungan rentang

Prefetch asinkron dan pembatalan

PrefetchRange menjadwalkan satu rentang latar belakang dan mengganti permintaan sebelumnya yang tidak terkait

Cache miss latar depan di luar rentang aktif membatalkan worker sebelum memperoleh kunci sumber, memungkinkan transport kooperatif menyerah segera ke operasi yang terlihat

Timpa THPDFRandomAccessSource.ReadAtCancellable untuk memeriksa THPDFCancellationToken yang diberikan selama I/O jaringan atau penyimpanan; implementasi warisan memeriksa pembatalan tepat sebelum dan sesudah ReadAt

Atur AsyncPrefetchEnabled ke False ketika kebijakan transport melarang akses latar belakang

Read-ahead adaptif

Aliran parser memanggil ObserveReadPattern setelah setiap pembacaan sukses; pembacaan maju berkelanjutan menumbuhkan jendela read-ahead melalui blok 1, 2, 4, dan 8, sementara seek atau akses mundur segera menekan transport spekulatif

SequentialReadToleranceBytes menerima celah maju kecil sebagai akses sekuensial dan default ke 4096 byte; MaxReadAheadBlocks membatasi jendela adaptif dari 1 hingga 32 blok dan default ke 8

Jendela efektif juga dibatasi oleh MaxCacheBytes, sehingga read-ahead tidak dapat secara sengaja melebihi kapasitas cache yang dikonfigurasi; kepercayaan sekuensial pulih secara bertahap setelah lompatan acak

Atur AdaptiveReadAheadEnabled ke False untuk prefetch satu-blok tetap sambil mempertahankan transport asinkron

Statistik

TransferAt memperoleh referensi blok cache yang dipertahankan dan menulisnya ke tujuan tanpa mengalokasikan atau mengisi buffer baca perantara

THPDFRangeCacheStatistics melaporkan jumlah dan byte pembacaan sumber backing, hit dan miss cache, admission cache, penolakan dan eviction, admission frekuensi, penolakan dan penuaan, permintaan prefetch, penyelesaian dan pembatalan, pembacaan sekuensial dan acak, prefetch yang ditekan, blok read-ahead saat ini dan puncak, panggilan dan byte transfer langsung, plus jumlah dan byte rentang cache saat ini

Kepemilikan

Ketika OwnsSource adalah True, menghancurkan pembungkus membatalkan dan bergabung dengan worker-nya, melepaskan rentang cache, dan membebaskan sumber yang dibungkus

API terkait