تحسين أداء Aspose.PSD باستخدام ذاكرة التخزين المؤقت قابلة للتخصيص

تحسين الأداء باستخدام ذاكرة التخزين المؤقت القابلة للتخصيص

Aspose.PSD يستخدم التخزين المؤقت لتخزين البيانات المؤقتة. الآلية سهلة الاستخدام وقابلة للتخصيص وشفافة. تضمن عدم وجود مشكلات في الأداء أثناء معالجة الصور. تشرح هذه المقالة كيفية تخصيص التخزين المؤقت باستخدام واجهة برمجة التطبيقات لـAspose.PSD لـ.NET.

تخصيص التخزين المؤقت

عندما يحتاج العملية إلى تخزين بيانات مؤقتة، يتم تخصيص هذا التخزين في التخزين المؤقت. يمكن أن يكون التخزين المؤقت مساحة في الذاكرة أو على القرص، ويتم تعيينه من قبل المستخدم. عندما لا تعود هناك حاجة إلى البيانات المؤقتة، يتم إطلاق المساحة. يمكن تفقد إحصائيات المساحة المخصصة في أي وقت. يمكن تخصيص كيفية تخصيص التخزين المؤقت واستخدامه من قبلAspose.PSD. توضح هذا القسم الإعدادات المختلفة وإعداداتها الافتراضية، وتظهر مقاطع الشفرة أدناه كيفية استخدامها.

تحديد مكان تخصيص التخزين المؤقت

لتخصيص كيفية تخصيص مساحة التخزين المؤقت، قم بتعيين خاصية CacheType. بشكل افتراضي، يتم تخصيص التخزين المؤقت في الذاكرة، وعندما لا يكون هناك مساحة أخرى متاحة في الذاكرة، يتم تخصيصه إلى القرص. يتم التقاط هذا السلوك بواسطة Auto mode. Auto mode مرن ويزيد من الأداء. هناك أيضًا وضعيات أخرى:

  • وضع 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;