Melhoria de Desempenho Aspose.PSD usando Cache Customizável
Melhora o Desempenho com Cache Customizável
Aspose.PSD utiliza caching para armazenamento temporário de dados. O mecanismo é simples de usar, customizável e transparente. Garante que não haja problemas de desempenho durante o processamento de imagens. Este artigo explica como personalizar o cache com a API Aspose.PSD para .NET.
Personalizando o Cache
Quando um processo precisa de armazenamento temporário de dados, este armazenamento é alocado no cache. O cache pode ser espaço em memória ou em disco e é configurado pelo usuário. Quando os dados temporários não são mais necessários, o espaço é liberado. As estatísticas do espaço alocado podem ser inspecionadas a qualquer momento. Como o Aspose.PSD aloca e utiliza caches pode ser customizado. Esta seção descreve as várias configurações e seus padrões e os trechos de código abaixo mostram como podem ser utilizados.
Definindo onde o Cache é Alocado
Para personalizar como o espaço do cache é alocado, defina a propriedade CacheType. Por padrão, o cache é alocado na memória e quando não há mais espaço disponível na memória, ele é alocado no disco. Esse comportamento é capturado pelo modo Automático. O modo Automático é flexível e maximiza o desempenho. Existem também outros modos:
- Modo CacheOnDiskOnly: alocação apenas no disco.
- Modo CacheInMemoryOnly: alocação apenas na memória.
Selecionar o modo CacheOnDiskOnly pode resultar em desempenho ruim.
Definindo o Tamanho do Cache
Defina o espaço máximo (em bytes) que pode ser alocado no disco ou na memória configurando as propriedades MaxDiskSpaceForCache e MaxMemoryForCache respectivamente. Por padrão, ambos os valores são definidos como 0, o que significa que não há limite superior.
Controlando o Realocação do Cache
Se não houver espaço suficiente disponível na memória (conforme especificado pela propriedade MaxMemoryForCache) quando um novo cache é alocado, o cache é alocado no disco. Se não houver espaço suficiente no disco, uma exceção é lançada. O processo de alocação de cache passa da memória para o disco, mas não vice-versa. A propriedade ExactReallocateOnly é usada para controlar a realocação de memória. A realocação é mais provável de ocorrer para caches pré-alocados. Pode acontecer quando o sistema percebe que o espaço alocado não será suficiente. Se ExactReallocateOnly estiver definido como o valor padrão, Falso, o espaço é realocado para o mesmo meio. Quando definido como Verdadeiro, a realocação não pode exceder o espaço máximo especificado. Neste caso, o cache existente alocado na memória (que requer realocação) é liberado e o espaço estendido é alocado no disco.
Amostras do Programa
// 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; |