THPDFCoalescingRandomAccessSource Class
Indpakker enhver THPDFRandomAccessSource med begrænset områdecaching og annulleringsbevidst asynkron forudhentning
Deklaration
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;
Sammenfletning af områder
- En cache-miss udvides til en justeret blok, der dækker de ønskede bytes, så naboesende parser-læsninger deler én forespørgsel mod backing-store
- Cachen håndhæver uafhængige grænser for samlede bytes, pr. opslag og et valgfrit posterantal, og et overdimensioneret område omgår fastholdelsen
- Adaptiv optagelse kombinerer least-recently-used-rækkefølge med et begrænset frekvensskema med forældelse, så kolde scanninger læser direkte uden at erstatte varmere fastholdte områder
- Når en sparsom kilde ikke kan levere en udvidet blok, falder indpakningen tilbage på det præcist tilgængelige, ønskede område
- Kildeadgang serialiseres, så eksisterende underklasser ikke behøver at blive trådsikre
Asynkron forudhentning og annullering
PrefetchRange planlægger ét baggrundsområde og erstatter en tidligere, ikke-relateret forespørgsel
En cache-miss i forgrunden uden for det aktive område annullerer arbejderen, inden kildelåsen hentes, så en kooperativ transport kan give plads til den synlige operation
Tilsidesæt THPDFRandomAccessSource.ReadAtCancellable for at inspicere den medsendte THPDFCancellationToken under netværks- eller lager-I/O; den nedarvede implementering kontrollerer annullering umiddelbart før og efter ReadAt
Sæt AsyncPrefetchEnabled til False, når transportpolitikken forbyder baggrundsadgang
Adaptiv forudlæsning
Parserstrømmen kalder ObserveReadPattern efter hver vellykket læsning; vedvarende fremadrettede læsninger udvider forudlæsningsvinduet gennem 1, 2, 4 og 8 blokke, mens et seek eller en baglæns læsning straks undertrykker spekulativ transport
SequentialReadToleranceBytes accepterer små fremadrettede huller som sekventiel adgang og er som standard 4096 bytes; MaxReadAheadBlocks begrænser det adaptive vindue fra 1 til 32 blokke og er som standard 8
Det effektive vindue begrænses også af MaxCacheBytes, så forudlæsning ikke bevidst kan overstige den konfigurerede cachekapacitet; sekventiel tillid genopbygges gradvist efter et tilfældigt spring
Sæt AdaptiveReadAheadEnabled til False for fast en-bloks forudhentning, samtidig med at den asynkrone transport bibeholdes
Statistik
TransferAt henter referencer til fastholdte cacheblokke og skriver dem til destinationen uden at allokere eller fylde en mellemliggende læsebuffer
THPDFRangeCacheStatistics rapporterer backing-source-læseantal og -bytes, cache-hits og -misses, cache-optagelser, -afvisninger og -udsmidninger, frekvensoptagelser, -afvisninger og forældelse, forudhentningsforespørgsler, -fuldførelser og -annulleringer, sekventielle og tilfældige læsninger, undertrykte forudhentninger, nuværende og maksimale forudlæsningsblokke, direkte overførselskald og -bytes samt det nuværende antal cachedes områder og bytes
Ejerskab
Når OwnsSource er True, annullerer og forener ødelæggelsen af indpakningen dens arbejder, frigiver cachedes områder og frigør den indpakkede kilde