Подобряване на производителността на Aspose.PSD с използване на персонализируем кеш
Подобряване на производителността с персонализируем кеш
Aspose.PSD използва кеширане за временно съхранение на данни. Механизмът е лесен за използване, персонализируем и прозрачен. Той гарантира, че няма проблеми с производителността по време на обработка на изображения. Тази статия обяснява как да персонализирате кеша с Aspose.PSD API за .NET.
Персонализиране на кеша
Когато процесът се нуждае от временно съхранение на данни, това съхранение се заделя в кеша. Кешът може да бъде в памет или на диск и се задава от потребителя. Когато временните данни вече не са необходими, пространството се освобождава. Статистиката на заделеното пространство може да бъде разгледана по всяко време. Как Aspose.PSD разпределя и използва кешове може да бъде персонализирано. Тази секция описва различните настройки и техните стойности по подразбиране, а кодовите откъски по-долу показват как могат да бъдат използвани.
Задаване на мястото, където се разпределя кешът
За да персонализирате как се разпределя пространството на кеша, задайте свойството CacheType. По подразбиране кешът се разпределя в памет и когато няма повече налично пространство в паметта, се разпределя на диск. Това поведение се изразява с режим Auto. Режимът Auto е гъвкав и максимизира производителността. Съществуват и други режими:
- Режим 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; |