ปรับปรุงประสิทธิภาพของ 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;