THPDFCoalescingRandomAccessSource Class

모든 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는 백그라운드 범위 하나를 예약하고 관련 없는 이전 요청을 대체합니다

활성 범위 밖에서 전경 캐시 누락이 발생하면 소스 잠금을 획득하기 전에 워커를 취소하므로, 협조적 전송 계층이 눈에 보이는 연산에 즉시 양보할 수 있습니다

네트워크나 스토리지 I/O 도중 전달된 THPDFCancellationToken을 검사하려면 THPDFRandomAccessSource.ReadAtCancellable을 재정의하십시오. 상속 구현은 ReadAt 직전과 직후에 취소를 확인합니다

전송 정책이 백그라운드 접근을 금지한다면 AsyncPrefetchEnabled를 False로 설정하세요

적응형 선행 읽기

파서 스트림은 성공한 읽기마다 ObserveReadPattern을 호출합니다. 지속적인 전방 읽기는 선행 읽기 윈도우를 1, 2, 4, 8 블록으로 키우고, 시크나 역방향 접근은 예측 전송을 즉시 억제합니다

SequentialReadToleranceBytes는 작은 전방 간격을 순차 접근으로 간주하며 기본값은 4096바이트입니다. MaxReadAheadBlocks는 적응형 윈도우를 1~32 블록으로 제한하며 기본값은 8입니다

유효 윈도우는 MaxCacheBytes로도 제한되므로 선행 읽기가 설정된 캐시 용량을 넘어설 수 없습니다. 순차 신뢰도는 임의 점프 이후 점진적으로 회복됩니다

비동기 전송을 유지한 채 고정된 한 블록 프리페치를 원한다면 AdaptiveReadAheadEnabled를 False로 설정하세요

통계

TransferAt는 보유 중인 캐시 블록 참조를 획득해 중간 읽기 버퍼를 할당하거나 채우지 않고 곧바로 대상에 기록합니다

THPDFRangeCacheStatistics는 백킹 소스 읽기 횟수와 바이트, 캐시 적중과 누락, 캐시 진입과 거부와 축출, 빈도 기반 진입과 거부와 에이징, 프리페치 요청과 완료와 취소, 순차 및 임의 읽기, 억제된 프리페치, 현재와 최고 선행 읽기 블록, 직접 전송 호출과 바이트, 그리고 현재 캐시된 범위 수와 바이트를 보고합니다

소유권

OwnsSource가 True면 래퍼를 파괴할 때 워커를 취소하고 조인하며, 캐시된 범위를 해제하고, 감싼 소스를 해제합니다

관련 API