بهبود عملکرد Aspose.PSD با استفاده از حافظه Cache قابل تنظیم
بهبود عملکرد با حافظه Cache قابل تنظیم
Aspose.PSD از حافظه Cache برای ذخیره موقت دادهها استفاده میکند. این مکانیسم آسان برای استفاده، قابل تنظیم و شفاف است. اطمینان حاصل میشود که مشکلات عملکردی در هنگام پردازش تصاویر وجود ندارد. این مقاله توضیح میدهد چگونه میتوان حافظه Cache را با استفاده از API Aspose.PSD برای Java تنظیم کرد.
تنظیمات حافظه Cache
وقتی یک فرآیند به ذخیره موقت دادهها نیاز دارد، این فضا در Cache تخصیص داده میشود. حافظه Cache ممکن است در حافظه یا در دیسک قرار گیرد و توسط کاربر تنظیم شود. زمانیکه دادههای موقت دیگر نیازی به آن ندارند، فضا آزاد میشود. آمار فضای تخصیص داده شده میتواند هر زمانی بررسی شود. چگونگی تخصیص و استفاده از Cache توسط Aspose.PSD میتواند تنظیم شود. این بخش شرح تنظیمات مختلف و تنظیمات پیشفرض آنها را توضیح داده و کدهای زیر نشان میدهد چگونه میتوانند استفاده شوند.
تنظیم جایی که Cache تخصیص داده میشود
برای تنظیم اینکه فضای Cache چگونه تخصیص داده میشود، خصوصیت CacheType را تنظیم کنید. پیشفرض، Cache در حافظه تخصیص داده میشود و زمانیکه فضایی دیگر در حافظه موجود نیست، به دیسک اختصاص داده میشود. این رفتار توسط حالت خودکار شناسایی میشود. حالت خودکار انعطافپذیر است و عملکرد را به حداکثر میرساند. همچنین حالتهای دیگری وجود دارد:
- حالت CacheOnDiskOnly: تخصیص فقط به دیسک.
- حالت CacheInMemoryOnly: تخصیص فقط به حافظه.
انتخاب حالت CacheOnDiskOnly ممکن است منجر به کاهش عملکرد شود.
تنظیم اندازه Cache
حداکثر فضایی که میتواند در دیسک یا حافظه تخصیص داده شود را با تنظیم خصوصیتهای MaxDiskSpaceForCache و MaxMemoryForCache تنظیم کنید. به طور پیشفرض، هر دو مقدار صفر تنظیم شدهاند، به این معنی که هیچ محدودیتی وجود ندارد.
کنترل دوباره تخصیص حافظه Cache
اگر فضای کافی برای تخصیص در حافظه موجود نباشد (همانطور که توسط خصوصیت MaxMemoryForCache مشخص شده است) زمانیکه Cache جدیدی تخصیص داده میشود، Cache به دیسک تخصیص داده خواهد شد. اگر فضای کافی در دیسک نباشد، یک استثناء اعلام میشود. فرآیند تخصیص Cache از حافظه به دیسک منتقل شده اما بالعکس صورت نمیگیرد. خصوصیت ExactReallocateOnly برای کنترل دوباره تخصیص حافظه استفاده میشود. دوباره تخصیص در اغلب موارد برای Cacheهای پیشتعیین شده اتفاق میافتد. این میتواند اتفاق بیفتد زمانیکه سیستم متوجه میشود که فضای تخصیص داده شده کافی نخواهد بود. اگر ExactReallocateOnly به مقدار پیشفرض، False، تنظیم شود، فضای تخصیصداده شده به همان مدیوم دوباره تخصیص داده میشود. زمانیکه به True تنظیم شود، دوباره تخصیص نمیتواند از مقدار حداکثر مشخص شده تجاوز کند. در این حالت، Cache حافظهای از پیش تخصیص داده شده (که نیاز به دوباره تخصیص دارد) آزاد شده و فضای گستردهتری در دیسک تخصیص داده میشود.
نمونههای برنامهنویسی
String dataDir = Utils.getDataDir(ControllCacheReallocation.class) + "PSD/"; | |
// 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.setCacheFolder(dataDir); | |
// Set cache on disk. | |
Cache.setCacheType(CacheType.CacheOnDiskOnly); | |
// The default cache max value is 0, which means that there is no upper limit | |
Cache.setMaxDiskSpaceForCache(1073741824); // 1 gigabyte | |
Cache.setMaxMemoryForCache(1073741824); // 1 gigabyte | |
// We do not recommend that you change the following property because it may greatly affect performance | |
Cache.setExactReallocateOnly(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.getAllocatedDiskBytesCount(); | |
long l2 = Cache.getAllocatedMemoryBytesCount(); | |
PsdOptions options = new PsdOptions(); | |
Color[] color = {Color.getRed(), Color.getBlue(), Color.getBlack(), Color.getWhite()}; | |
options.setPalette(new ColorPalette(color)); | |
options.setSource(new StreamSource(new java.io.ByteArrayInputStream(new byte[0]))); | |
try (RasterImage image = (RasterImage) Image.create(options, 100, 100)) { | |
Color[] pixels = new Color[10000]; | |
for (int i = 0; i < pixels.length; i++) { | |
pixels[i] = Color.getWhite(); | |
} | |
image.savePixels(image.getBounds(), pixels); | |
// After executing the code above 40000 bytes are allocated to disk. | |
long diskBytes = Cache.getAllocatedDiskBytesCount(); | |
long memoryBytes = Cache.getAllocatedMemoryBytesCount(); | |
// The allocation properties may be used to check whether all Aspose.PSD objects were properly disposed. If you've forgotten to call dispose on an object the cache values will not be 0. | |
l1 = Cache.getAllocatedDiskBytesCount(); | |
l2 = Cache.getAllocatedMemoryBytesCount(); | |
} |