THPDFCoalescingRandomAccessSource Class

עוטף כל THPDFRandomAccessSource עם מטמון טווחים תחום ו-prefetch אסינכרוני מודע-ביטול

הצהרה

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;

מיזוג טווחים

Prefetch אסינכרוני וביטול

PrefetchRange מתזמן טווח רקע אחד ומחליף בקשה מוקדמת שאינה קשורה

החמצת מטמון בחזית, מחוץ לטווח הפעיל, מבטלת את ה-worker לפני רכישת מנעול המקור, ומאפשרת לטרנספורט שיתופי לפנות במהירות לפעולה הנראית

דרסו את THPDFRandomAccessSource.ReadAtCancellable כדי לבחון את ה-THPDFCancellationToken שסופק בזמן I/O של רשת או אחסון; המימוש היורש בודק ביטול מיד לפני ואחרי ReadAt

הגדירו AsyncPrefetchEnabled כ-False כאשר מדיניות הטרנספורט אוסרת גישת רקע

קריאה מקדימה אדפטיבית

stream ה-parser קורא ל-ObserveReadPattern אחרי כל קריאה מוצלחת; קריאות קדימה מתמשכות מגדילות את חלון הקריאה המקדימה דרך 1, ‏2, ‏4 ו-8 בלוקים, בעוד seek או גישה אחורה מדכאים טרנספורט ספקולטיבי מיד

SequentialReadToleranceBytes מקבל פערי קדימה קטנים כגישה סדרתית וברירת המחדל שלו היא 4096 בתים; ‏MaxReadAheadBlocks מגביל את החלון האדפטיבי מ-1 ועד 32 בלוקים וברירת המחדל שלו היא 8

החלון האפקטיבי מוגבל גם על ידי MaxCacheBytes, כך שקריאה מקדימה אינה יכולה במכוון לחרוג מקיבולת המטמון שהוגדרה; הביטחון הסדרתי מתאושש בהדרגה אחרי קפיצה אקראית

הגדירו AdaptiveReadAheadEnabled כ-False עבור prefetch קבוע של בלוק אחד, תוך שמירה על טרנספורט אסינכרוני

סטטיסטיקות

TransferAt רוכש הפניות לבלוקי מטמון שמורים וכותב אותם ליעד בלי להקצות או למלא חוצץ קריאה ביניים

THPDFRangeCacheStatistics מדווח ספירת קריאות ובתים של מקור הגיבוי, hits ו-misses של מטמון, קבלות, דחיות ופינויים של מטמון, קבלות, דחיות והזדקנות לפי תדירות, בקשות, השלמות וביטולים של prefetch, קריאות סדרתיות ואקראיות, prefetch מדוכא, בלוקי קריאה מקדימה נוכחיים ובשיא, קריאות ובתים של העברה ישירה, וכן ספירה ובתים נוכחיים של טווחי מטמון

בעלות

כאשר OwnsSource הוא True, הריסת המעטפת מבטלת וממתינה ל-worker שלה, משחררת טווחי מטמון ומשחררת את המקור העטוף

ממשקי API קשורים