Клас 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, знищення обгортки скасовує робітника та приєднується до нього, звільняє кешовані діапазони та звільняє обгорнуте джерело