THPDFCoalescingRandomAccessSource Class
Omhult elke THPDFRandomAccessSource met begrensde bereik-caching en annuleringsbewuste asynchrone prefetch
Declaratie
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;
Bereik-samenvoeging
- Een cachemisser breidt uit naar een uitgelijnd blok dat de gevraagde bytes dekt, zodat aangrenzende parser-leesbewerkingen één verzoek aan de onderliggende opslag delen
- De cache handhaaft onafhankelijke limieten voor totale bytes, per item en optioneel aantal items, en een te groot bereik omzeilt retentie
- Adaptieve toelating combineert een minst-recent-gebruikt-volgorde met een begrensde verouderende frequentie-schets, zodat koude scans direct lezen zonder warmere bewaarde bereiken te vervangen
- Wanneer een schaarse bron geen uitgebreid blok kan leveren, valt de omhulling terug op het exact beschikbare gevraagde bereik
- Brontoegang wordt geserialiseerd, zodat bestaande subklassen niet draadveilig hoeven te worden
Asynchrone prefetch en annulering
PrefetchRange plant één achtergrondbereik en vervangt een niet-gerelateerd eerder verzoek
Een voorgrond-cachemisser buiten het actieve bereik annuleert de worker voordat de bronvergrendeling wordt verkregen, zodat een coöperatief transport snel kan toegeven aan de zichtbare bewerking
Overschrijf THPDFRandomAccessSource.ReadAtCancellable om het meegeleverde THPDFCancellationToken te inspecteren tijdens netwerk- of opslag-I/O; de overgeërfde implementatie controleert annulering onmiddellijk vóór en na ReadAt
Stel AsyncPrefetchEnabled in op False wanneer het transportbeleid achtergrondtoegang verbiedt
Adaptief vooruitlezen
De parserstroom roept ObserveReadPattern aan na elke geslaagde leesbewerking; aanhoudende voorwaartse leesbewerkingen vergroten het vooruitleesvenster via 1, 2, 4 en 8 blokken, terwijl een seek of achterwaartse toegang speculatief transport onmiddellijk onderdrukt
SequentialReadToleranceBytes accepteert kleine voorwaartse hiaten als sequentiële toegang en is standaard 4096 bytes; MaxReadAheadBlocks begrenst het adaptieve venster van 1 tot 32 blokken en is standaard 8
Het effectieve venster wordt ook begrensd door MaxCacheBytes, zodat vooruitlezen de geconfigureerde cachecapaciteit niet opzettelijk kan overschrijden; sequentieel vertrouwen herstelt geleidelijk na een willekeurige sprong
Stel AdaptiveReadAheadEnabled in op False voor vaste prefetch van één blok terwijl asynchroon transport behouden blijft
Statistieken
TransferAt verkrijgt verwijzingen naar bewaarde cacheblokken en schrijft deze naar de bestemming zonder een tussenliggende leesbuffer toe te wijzen of te vullen
THPDFRangeCacheStatistics rapporteert het aantal leesbewerkingen en bytes van de onderliggende bron, cachehits en -missers, cachetoelatingen, -afwijzingen en -verwijderingen, frequentietoelatingen, -afwijzingen en -veroudering, prefetch-verzoeken, -voltooiingen en -annuleringen, sequentiële en willekeurige leesbewerkingen, onderdrukte prefetches, huidige en piek-vooruitleesblokken, directe overdrachtsaanroepen en -bytes, plus het huidige aantal en aantal bytes van gecachte bereiken
Eigendom
Wanneer OwnsSource True is, annuleert en voegt het vernietigen van de omhulling de worker samen, geeft gecachte bereiken vrij en bevrijdt de omhulde bron