Aspose.PSD Performansını Özelleştirilebilir Önbellek Kullanarak İyileştirme

Özelleştirilebilir Önbellek Kullanarak Performansı İyileştirir

Aspose.PSD, geçici veri depolama için önbellek kullanır. Mekanizma kullanımı kolay, özelleştirilebilir ve şeffaftır. Bu, görüntü işleme sırasında performans sorunu olmadığından emin olur. Bu makale, .NET için Aspose.PSD API ile önbelleği nasıl özelleştireceğinizi açıklar.

Önbelleği Özelleştirme

Bir işlem geçici veri depolamaya ihtiyaç duyduğunda, bu depolama önbellekte ayrılır. Önbellek, kullanıcı tarafından ayarlanabilen bellekte veya diskte yer olabilir. Geçici veri artık gerekli olmadığında, alan serbest bırakılır. Tahsis edilen alanın istatistikleri her zaman incelenebilir. Aspose.PSD’nin nasıl önbellek ayırdığını ve kullandığını özelleştirmek mümkündür. Bu bölüm, çeşitli ayarları ve varsayılanlarını açıklar ve aşağıdaki kod parçaları bunların nasıl kullanılabileceğini gösterir.

Önbelleğin Ayrıldığı Yeri Ayarlama

Önbellek alanının nasıl ayrılacağını özelleştirmek için CacheType özelliğini ​​ayarlayın. Varsayılan olarak, önbellek bellekte ayrılır ve bellekte daha fazla alan mevcut olmadığında diskte ayrılır. Bu davranış, Otomatik mod tarafından yakalanır. Otomatik mod esnektir ve performansı maksimize eder. Ayrıca diğer modlar da vardır:

  • Yalnızca Diskte Önbellek Modu: Yalnızca diske ayrılma.
  • Yalnızca Bellekte Önbellek Modu: Yalnızca belleğe ayrılma.

Yalnızca Diskte Önbellek Modu seçmek, zayıf performansa neden olabilir.

Önbellek Boyutunun Ayarlanması

Diskte veya bellekte ayrılabilecek maksimum alanı (byte cinsinden) MaxDiskSpaceForCache ve MaxMemoryForCache özelliklerini sırasıyla ayarlayarak belirleyin. Varsayılan olarak, her iki değer de 0 olarak ayarlanmıştır, bu da bir üst sınır olmadığı anlamına gelir.

Önbellek Yeniden Dağıtımını Kontrol Etme

Yeni bir önbelleğe yer ayrılacağında bellekte yeterli yer yoksa (MaxMemoryForCache özelliği belirtildiği gibi) önbellek diske ayrılır. Diskte yeterli alan yoksa, bir istisna oluşturulur. Önbellek tahsis süreci, bellekten diske ancak tam tersi şekilde taşınır. ExactReallocateOnly özelliği hafızayı yeniden tahsis etmeyi kontrol etmek için kullanılır. Yeniden tahsis, önceden tahsis edilmiş önbellekler için muhtemelen gerçekleşir. Tahsis edilen alanın yetersiz olacağını sistem fark ederse gerçekleşebilir. ExactReallocateOnly varsayılan değeri False olarak ayarlandığında, alan aynı ortama yeniden tahsis edilir. True olarak ayarlandığında, yeniden tahsis, belirtilen maksimum alanı aşamaz. Bu durumda, mevcut bellekte tahsis edilen önbellek (yeniden tahsis gerektiren) serbest bırakılır ve genişletilmiş alan diskte ayrılır.

Program Örnekleri

// 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;