משפר ביצועים עם מטמון שניתן להתאמה
Aspose.PSD משתמש במטמון לצורך אחסון זמני של נתונים. המנגנון פשוט לשימוש, ניתן להתאמה ושקוף. הוא מבטיח כי אין בעיות ביצועים במהלך עיבוד תמונות. מאמר זה מסביר איך להתאים אישית את המטמון עם ממשק ה-API של Aspose.PSD ל-.NET.
התאמה אישית של המטמון
כאשר תהליך זקוק לאחסון נתונים זמני, האחסון הזה מוקצה במטמון. המטמון יכול להיות מרחב בזיכרון או בדיסק והוא מוגדר על ידי המשתמש. כאשר הנתונים הזמניים אינם נחוצים יותר, המרווח משוחרר. ניתן לבדוק את הסטטיסטיקות של המרווח המוקצה בכל עת. כיצד Aspose.PSD מוקצה ומשתמש במטמונים ניתן להתאים אישית. במקטע זה מתארים את ההגדרות השונות ואת ברירות המחדל שלהן והמפרטים בקטעים הבאים מראים כיצד ניתן להשתמש בהם.
הגדרת המיקום שבו מוקצה המטמון
כדי להתאים איך נקבע מרווח המטמון, עליכם להגדיר את המאפיין CacheType. כחלק מברירת המחדל, המטמון מוקצה בזיכרון וכאשר אין עוד תקף בזיכרון, המרווח מוקצה בדיסק. מבנה זה כלול במצב Auto. המצב Auto הוא גמיש ומקסימלי בביצועים. קיימים גם מצבים אחרים:
- מצב CacheOnDiskOnly: מוקצה לדיסק בלבד.
- מצב CacheInMemoryOnly: מוקצה לזיכרון בלבד.
בחירת מצב CacheOnDiskOnly עשויה לגרום לביצועים רעים.
הגדרת גודל המטמון
יש להגדיר את המרווח המרבי (בבתים) שניתן למקם בדיסק או בזיכרון על ידי הגדרת המאפיינים MaxDiskSpaceForCache ו-MaxMemoryForCache בהתאמה. במצב המבריר, שתי הערכים מוגדרים כ-0, המהווה משמעו שאין גבול עליון.
שליטה בהפצת המטמון מחדש
אם אין מספיק מרווח זמין בזיכרון (כפי שנקבע על ידי המאפיין MaxMemoryForCache) כאשר מוקצה מטמון חדש, המטמון מוקצה לדיסק. אם אין מרווח מספיק בדיסק, ישולך חריגה. תהליך ההקצאת מטמון מעביר מזיכרון לדיסק אך לא להיפך. המאפיין ExactReallocateOnly משמש לשליטה בהפצת הזיכרון מחדש. הפצת אחזור מדי סיכוים גבוהה לקרות במטמונים שהוקצו מראש. זה יכול לקרות כאשר המערכת מבינה כי המרווח המוקצה לא יהיה מספיק. אם הערך של ExactReallocateOnly מוגדר לערך ברירת המחדל, שהוא False, המרווח מופצה לאותה מדיום. כאשר מוגדר ל-True, ההפצה לא יכולה לחרוג מהמרווח המקסימלי שנקבע. במקרה כזה, מטמון הזיכרון המוקצה בקידום (שמחייב הפצה מחדש) משוחרר ומרווח המוקצה מורחב על ידי הדיסק.
דוגמאות לתוכניות
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// By default the cache folder is set to the local temp directory. You can specify a different cache folder from the default this way: | |
Cache.CacheFolder = dataDir; | |
// Set cache on disk. | |
Cache.CacheType = CacheType.CacheOnDiskOnly; | |
// The default cache max value is 0, which means that there is no upper limit | |
Cache.MaxDiskSpaceForCache = 1073741824; // 1 gigabyte | |
Cache.MaxMemoryForCache = 1073741824; // 1 gigabyte | |
// We do not recommend that you change the following property because it may greatly affect performance | |
Cache.ExactReallocateOnly = false; | |
// At any time you can check how many bytes are currently allocated for the cache in memory or on disk By examining the following properties | |
long l1 = Cache.AllocatedDiskBytesCount; | |
long l2 = Cache.AllocatedMemoryBytesCount; | |
PsdOptions options = new PsdOptions(); | |
//GifOptions options = new GifOptions(); | |
options.Palette = new ColorPalette(new[] { Color.Red, Color.Blue, Color.Black, Color.White }); | |
options.Source = new StreamSource(new MemoryStream(), true); | |
using (RasterImage image = (RasterImage)Image.Create(options, 100, 100)) | |
{ | |
Color[] pixels = new Color[10000]; | |
for (int i = 0; i < pixels.Length; i++) | |
{ | |
pixels[i] = Color.White; | |
} | |
image.SavePixels(image.Bounds, pixels); | |
// After executing the code above 40000 bytes are allocated to disk. | |
long diskBytes = Cache.AllocatedDiskBytesCount; | |
long memoryBytes = Cache.AllocatedMemoryBytesCount; | |
} | |
// The allocation properties may be used to check whether all Aspose.Imaging objects were properly disposed. If you've forgotten to call dispose on an object the cache values will not be 0. | |
l1 = Cache.AllocatedDiskBytesCount; | |
l2 = Cache.AllocatedMemoryBytesCount; |