תשתית מטמון
HotPDF מספק מטמון זיכרון משוקלל חסום לאובייקטי ביניים רב-פעמיים ומטמון עמודים מעובדים מתמיד המשמש את עיבוד מסמכים שנטענו
מטמון זיכרון משוקלל
THPDFWeightedCache ב-HPDFCache מחזיק בערכי TObject, מאנדקס אותם לפי AnsiString, ומסלק את הערכים שנעשה בהם שימוש לאחרונה פחות עד שמשקלם המשולב תואם ל-MaxBytes
Getו-TryGetמקדמים פגיעה לשימוש לאחרונה ומעדכנים סטטיסטיקת בקשותPeekו-ContainsKeyבוחנים רשומות מבלי לשנות את סדר העדכניות או את סטטיסטיקת הבקשותPutלוקח בעלות, מחליף מפתח קיים במקום, ומקבל בבטחה את אותו אובייקט שוב כאשר רק משקלו משתנהRemoveמשחרר רשומה, בעודExtractמעביר את הבעלות לקורא- צמצום
MaxBytesמסלק רשומות מיידית, ו-TrimToBudgetחושף את אותה פעולת התכנסות באופן מפורש Hits,Misses,HitRate,Evictions,Rejections, ו-Replacementsחושפים את התנהגות המטמון, בעודResetStatisticsפותח במרווח מדידה חדש- קיבולת המשבצות גדלה באופן גיאומטרי והרשומות החיות נותרות מקושרות בסדר עדכניות בזמן קבוע
מפתחות תוכן
function HPDFCacheKeyOfBytes(const Bytes: TBytes): AnsiString;
function HPDFCacheKeyOfStream(Stream: TStream): AnsiString;
שתי הפונקציות מחזירות את אותו מפתח הקסדצימלי SHA-256 באותיות קטנות עבור אותו תוכן
HPDFCacheKeyOfStream מבצע גיבוב מבלי להקצות מערך בתים שני בגודל מלא, קורא זרמים הניתנים לחיפוש ממיקום אפס, ומשחזר את מיקומם המקורי
מטמון מפענחי גופנים טעונים
כל מופע THotPDF שומר מפענחי גופנים טעונים שנותחו בהצלחה במטמון LRU משוקלל בהיקף המסמך
- תקציב ברירת המחדל הוא 32 MiB עם מגבלה קשיחה של 128 רשומות, ותקציב של אפס בתים מנטרל שמירה
- מילוני גופן עקיפים משותפים עושים שימוש חוזר בליבה מנותחת אחת בכל העמודים, גם כשעמודים משתמשים בשמות משאב שונים
- חילוץ טקסט, ייצוא SVG, החלפת טקסט טעון ובקשות מפענח מפורשות חולקים את אותו מטמון
GetLoadedFontDecoderמעתיק בעומק מערכים מנוהלים כך שקוראים לא יוכלו לשנות מיפויים או רוחבים במטמון- טעינת מסמך מחדש, שינוי הגרף, פסילת עמודים, JSON Patch וכל הקצאה של
CMapResourcePathמנקים מפענחים שנשמרו - רכישת מפענח מסודרת לכל מסמך כדי למנוע ניתוח כפול של גופן אחד, אבל הנעילה אינה הופכת שינוי מסמך מקבילי לבטוח
GetLoadedFontDecoderCacheInfoחושף רשומות, בייטים מוערכים, תקציב, פגיעות, החטאות, ניתוחים, סילוקים ופסילות
מטמון פענוח תמונות טעונות מפוצל
כל מופע THotPDF מתאם שימוש חוזר בפענוח תמונות טעונות דרך 16 שברי מטא-נתונים נעולים באופן עצמאי
- חיפוש וקבלה במטמון אוחזים רק בשבר הנבחר, בזמן שפענוח יקר של מסננים ותמונות רץ מחוץ לנעילות המטמון
- singleflight מדויק לכל מפתח בוחר פענוע בעלים אחד וגורם לקוראים כפולים להמתין לאותה תוצאה שהושלמה
- ה-
ImageCacheMaxBytesהמוגדר, מגבלת ספירת הרשומות והמגבלה לכל רשומה נשארים גלובליים בכל השברים - רשומות תמונה מפוענחות מחזיקות handles בלתי ניתנים לשינוי עם ספירת-הפניות ששורדים סילוק ומאפשרים ל-renderers לצייר פגיעות חמות בלי לממש עותק
TBitmap - תמונות שהושלמו מועתקות למופעי
TBitmapבבעלות הקורא, כך שקוראים לא יוכלו לשנות פיקסלים במטמון - טעינת מסמך מחדש ופסילת מטמון תמונות מנקים רשומות שהושלמו, בזמן שאובייקטי flight פעילים שומרים על מחזור החיים עצמאי עם ספירת-הפניות משלהם
GetImageDecodeConcurrencyInfoמדווח על flights פעילים, פענועי בעלים פעילים ושיאים, המתנות, השלמות וכשלים
מטמון טרנספורמציות ICC
HPDFICC חולקת טרנספורמציות מלאות ממקור אל sRGB דרך מטמון LRU משוקלל בטוח-ל-thread בן 64 MiB, כולל פרופילי proof ופלט כשהוגדרו
- מפתח ה-SHA-256 מכסה את תוכן המקור המלא, פרופילי proof ופלט, את כוונת הרינדור האפקטיבית ואת הגדרת פיצוי הנקודה השחורה
HPDFGetICCTransformCacheInfoמדווח פגיעות, החטאות, סילוקים, דחיות, ספירת רשומות, בייטים נוכחיים ובייטים מרבייםHPDFSetICCTransformCacheMaxBytesמיישם מיד תקציב חדש ברמת התהליך ומסלק טרנספורמציות שנעשה בהן שימוש לאחרונה פחות לפי הצורךHPDFClearICCTransformCacheמשחרר טרנספורמציות שנשמרו ומאפס סטטיסטיקות בקשות בלי לפסול ממשקי טרנספורמציה שקוראים כבר מחזיקים בהם
מטמון ערכות-גופנים מתמשך
הגדירו את THotPDF.FontSubsetCacheFolder כדי להפעיל תוצאות subset לשימוש חוזר של TrueType ו-OpenType כש-EnableFontSubsetting פעיל
- המפתח מכסה את בייטי הגופן המקוריים, מפת סיביות הגליפים-בשימוש המדויקת, מצב compact או sparse, ואת גרסת סכימת המטמון
- גם מסלול מחסן הגופנים הרגיל של GDI וגם ה-finalizer של הגופן הרשום ל-Unicode עושים שימוש חוזר באותו מטמון
- רשומות compact של PDF/A שומרות את מפת ה-GID מישן-לחדש ואת ספירת הגליפים החדשה הדרושים ל-
CIDToGIDMap - רשומות מאומתות לפני שימוש, רשומות פגומות מוסרות, וההחלפה משתמשת בהעברה אטומית באותה תיקייה
FontSubsetCacheMaxBytesמיושם מיד ומסלק את קובצי המטמון המדויקים שניגשו אליהם לאחרונה בלי לעבור תיקיות לא קשורותGetFontSubsetCacheInfoמדווח פגיעות, החטאות, כתיבות, סילוקים, שחיתות, דחיות, כשלי כתיבה, בייטים וקבציםClearFontSubsetCacheמסירה רק רשומות ערכות-גופנים ורשומות זמניות נטושות מהתיקייה המוגדרת
PDF.EnableFontSubsetting := True;
PDF.FontSubsetCacheFolder := 'C:\ProgramData\MyApp\HotPDF\FontSubsets';
PDF.FontSubsetCacheMaxBytes := 256 * 1024 * 1024;
מטמון עמודים מעובדים מתמיד
מגדירים את THotPDF.RenderCacheFolder כדי להפעיל את שכבת הדיסק המשמשת לאחר מטמון העמודים המעובדים בזיכרון
- קובצי עמוד ממופתחים לפי תוכן המסמך, אינדקס עמוד מבוסס-אפס, DPI, נראות תוכן-אופציונלי אפקטיבית, כוונת צבע ומדיניות fallback
- שינויי שכבות וכוונת-צבע בוחרים וריאנטי מצב לשימוש חוזר במקום להשליך כל bitmap מטמון
- עדכוני PNG ואינדקס אטומיים, וקובצי זמניים שננטשו מוסרים במהלך שחזור
- קריאות עמוד מרעננות את העדכניות ברמת העמוד, בעוד ספירת מסמכים, ספירת עמודים ומגבלות בתים מסלקות נתונים שנעשה בהם שימוש לאחרונה פחות
- צמצום מגבלה מוגדרת מתכנס מיידית במקום להמתין לכתיבה מאוחרת יותר
- קובצי PNG פגומים, שורות אינדקס ישנות או כפולות, תיקיות חסרות ותיקיות מטמון ללא אינדקס מתוקנים באופן אוטומטי
- מפתחות וקואורדינטות מסמך לא תקינים נדחים לפני גישה למערכת הקבצים
- תיקיות מסמכים מקושרות מדולגות בזמן שחזור, קריאות, כתיבות, פסילה וסילוק; הקישורים וקובצי היעד החיצוניים שלהם נשמרים
בעלות
THPDFWeightedCacheמחזיק בערכים שהועברו אלPutאלא אם ערך הוחזר על ידיExtractTHPDFDiskPageCache.Lookupמחזיר מפת סיביות שהוקצתה זה עתה בבעלות הקורא- ערכי מפת סיביות שהועברו אל
THPDFDiskPageCache.Storeנותרים בבעלות הקורא
ממשקי API קשורים
- מטמון ערכות-גופנים מתמשך
- THotPDF.LoadedFontDecoderCacheMaxBytes
- THotPDF.GetLoadedFontDecoderCacheInfo
- מטמון פענוח תמונות טעונות מפוצל
- THotPDF.GetImageDecodeConcurrencyInfo
- THotPDF.RenderCacheFolder
- THotPDF.RenderCacheMaxDocuments
- THotPDF.RenderCacheMaxBytes
- THotPDF.RenderLoadedPageToBitmapCached
- Rendering Diagnostics and Operation Telemetry