بهبود عملکرد Aspose.PSD با استفاده از حافظه نهان قابل تنظیم
بهبود عملکرد با حافظه نهان قابل تنظیم
Aspose.PSD برای ذخیرهسازی دادههای موقت از حافظه نهان استفاده میکند. این مکانیسم ساده برای استفاده، قابل تنظیم و شفاف است. این اطمینان را میدهد که هیچ مشکل عملکردی در هنگام پردازش تصویر وجود نداشته باشد. این مقاله توضیح میدهد که چگونه با استفاده از API Aspose.PSD برای .NET، حافظه نهان را سفارشیسازی کنیم.
سفارشیسازی حافظه نهان
هنگامی که یک فرآیند نیاز به ذخیره داده موقت دارد، این ذخیرهسازی در حافظه نهان اختصاص داده میشود. حافظه نهان ممکن است در حافظه یا روی دیسک فضایی باشد که توسط کاربر تعیین میشود. زمانی که دیگر نیازی به دادههای موقت نیست، فضا آزاد میشود. آمار فضای اختصاص دادهشده هر زمان قابل بازرسی است. چگونگی اختصاص دادن و استفاده از حافظه نهان توسط Aspose.PSD قابل سفارشیسازی است. این بخش تنظیمات مختلف و مقادیر پیشفرض آنها را شرح میدهد و قطعهکدهای زیر نشان میدهد که چگونه میتوانند استفاده شوند.
تنظیم جایی که حافظه نهان اختصاص داده میشود
برای سفارشیسازی نحوه اختصاص فضای حافظه نهان، ویژگی CacheType را تنظیم کنید. به طور پیشفرض، حافظه نهان در حافظه اختصاص داده میشود و زمانی که دیگر فضایی در حافظه در دسترس نیست، به دیسک تخصیص داده میشود. این رفتار توسط حالت خودکار گرفته شده است. حالت خودکار انعطافپذیر است و عملکرد را بیشینه میکند. همچنین حالتهای دیگری نیز وجود دارند:
- حالت 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; |