Клас THPDFCoalescingRandomAccessSource

Обгортає будь-який THPDFRandomAccessSource обмеженим кешуванням діапазонів та чутливою до скасування асинхронною попередньою вибіркою

Оголошення

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;

Об'єднання діапазонів

Асинхронна попередня вибірка та скасування

PrefetchRange планує один фоновий діапазон і замінює не пов'язаний з ним попередній запит

Промах кешу на передньому плані поза активним діапазоном скасовує робітника до отримання блокування джерела, дозволяючи кооперативній транспортній реалізації швидко поступитися видимій операції

Перевизначте THPDFRandomAccessSource.ReadAtCancellable, щоб перевіряти отриманий THPDFCancellationToken під час мережевого чи дискового введення-виведення; успадкована реалізація перевіряє скасування одразу до та після ReadAt

Встановіть AsyncPrefetchEnabled на False, коли транспортна політика забороняє фоновий доступ

Адаптивне випереджальне читання

Потік парсера викликає ObserveReadPattern після кожного успішного читання; стабільне пересилання вперед зростає вікно випереджального читання через 1, 2, 4 та 8 блоків, а пошук чи зворотний доступ негайно пригнічує спекулятивний транспорт

SequentialReadToleranceBytes приймає невеликі пропуски вперед як послідовний доступ і за замовчуванням становить 4096 байтів; MaxReadAheadBlocks обмежує адаптивне вікно від 1 до 32 блоків і за замовчуванням дорівнює 8

Ефективне вікно також обмежується MaxCacheBytes, тому випереджальне читання не може навмисно перевищити налаштовану ємність кешу; впевненість у послідовності поступово відновлюється після випадкового стрибка

Встановіть AdaptiveReadAheadEnabled на False для фіксованої попередньої вибірки одним блоком, зберігаючи асинхронний транспорт

Статистика

TransferAt отримує посилання на утримані кеш-блоки та записує їх у призначення без виділення чи заповнення проміжного буфера читання

THPDFRangeCacheStatistics повідомляє кількість читань і байтів з джерела, потрапляння та промахи кешу, прийняття, відхилення та витіснення з кешу, частотні прийняття, відхилення та старіння, запити попередньої вибірки, завершення та скасування, послідовні та випадкові читання, пригнічені попередні вибірки, поточну та пікову кількість блоків випереджального читання, прямі виклики передавання та байти, а також поточну кількість і байти кешованих діапазонів

Володіння

Коли OwnsSource має значення True, знищення обгортки скасовує робітника та приєднується до нього, звільняє кешовані діапазони та звільняє обгорнуте джерело

Пов'язані API