THPDFCoalescingRandomAccessSource Class
Pakker inn enhver THPDFRandomAccessSource med avgrenset rekkevidde-bufring og kanselleringsbevisst asynkron forhåndshenting
Deklarasjon
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;
Rekkeviddesammenslåing
- En cache-miss utvides til en justert blokk som dekker de forespurte bytene, så tilstøtende parser-lesinger deler én lagrings-kilde-forespørsel
- Cachen håndhever uavhengige total-byte-, per-oppførings- og valgfrie oppføringsantalls-grenser, og en overdimensjonert rekkevidde omgår bevaring
- Adaptiv opptak kombinerer sist-brukt-ordren med et avgrenset frekvens-skjema som eldes, så kalde skanninger leser direkte uten å erstatte varmere bevarte rekkevidder
- Når en sparsom kilde ikke kan tilby en utvidet blokk, faller innpakningen tilbake til det nøyaktige tilgjengelige forespurte området
- Kildeadgang er serialisert, så eksisterende underklasser ikke trenger å bli trådsikre
Asynkron forhåndshenting og kansellering
PrefetchRange planlegger én bakgrunnsrekkevidde og erstatter en urelatert tidligere forespørsel
En cache-miss i forgrunnen utenfor den aktive rekkevidden kansellerer arbeideren før kilde-låsen hentes, slik at en kooperativ transport kan gi plassen raskt til den synlige operasjonen
Overstyr THPDFRandomAccessSource.ReadAtCancellable for å inspisere den medfølgende THPDFCancellationToken under nettverks- eller lagrings-I/O; den nedarvede implementasjonen sjekker kansellering umiddelbart før og etter ReadAt
Angi AsyncPrefetchEnabled til False når transport-policy forbyr bakgrunnsadgang
Adaptiv read-ahead
Parser-strømmen kaller ObserveReadPattern etter hver vellykket lesing; vedvarende fremoverlesinger vokser read-ahead-vinduet gjennom 1, 2, 4 og 8 blokker, mens et seek eller en bakovertilgang umiddelbart undertrykker spekulativ transport
SequentialReadToleranceBytes godtar små fremovergap som sekvensiell tilgang og har standarden 4096 byte; MaxReadAheadBlocks begrenser det adaptive vinduet fra 1 til 32 blokker og har standarden 8
Det effektive vinduet begrenses også av MaxCacheBytes, så read-ahead ikke kan overstige den konfigurerte cache-kapasiteten med vilje; sekvensiell tillit gjenopprettes gradvis etter et tilfeldig hopp
Angi AdaptiveReadAheadEnabled til False for fast én-blokks forhåndshenting mens du beholder asynkron transport
Statistikk
TransferAt henter bevarte cache-blokkreferanser og skriver dem til destinasjonen uten å tildele eller fylle en mellomliggende lesebuffer
THPDFRangeCacheStatistics rapporterer leseantall og -byte fra lagrings-kilden, cache-treff og -miss, cache-opptak, avvisninger og utkastinger, frekvens-opptak, avvisninger og aldring, forhåndshente-forespørsler, fullføringer og kanselleringer, sekvensielle og tilfeldige lesinger, undertrykte forhåndshentinger, nåværende og topp read-ahead-blokker, direkte overføringskall og -byte, samt nåværende bufret rekkeviddeantall og -byte
Eierskap
Når OwnsSource er True, ødelegger innpakningen arbeideren sin og venter på den, frigjør bufrede rekkevidder og frigjør den innpakkede kilden