Peningkatan Kinerja Aspose.PSD dengan Penggunaan Cache yang Dapat Disesuaikan

Meningkatkan Kinerja dengan Cache yang Dapat Disesuaikan

Aspose.PSD menggunakan caching untuk penyimpanan data sementara. Mekanisme ini mudah digunakan, dapat disesuaikan, dan transparan. Ini memastikan tidak ada masalah kinerja selama pemrosesan gambar. Artikel ini menjelaskan bagaimana cara menyesuaikan cache dengan API Aspose.PSD untuk Java.

Menyesuaikan Cache

Ketika suatu proses memerlukan penyimpanan data sementara, penyimpanan ini dialokasikan di dalam cache. Cache dapat berupa ruang di memori atau di disk dan diatur oleh pengguna. Ketika data sementara tidak lagi diperlukan, ruangnya akan dilepas. Statistik ruang yang dialokasikan dapat diperiksa kapan saja. Bagaimana Aspose.PSD mengalokasikan dan menggunakan cache dapat disesuaikan. Bagian ini menjelaskan berbagai pengaturan dan defaultnya, serta potongan kode di bawah ini menunjukkan bagaimana cara menggunakannya.

Menentukan Tempat Penyimpanan Cache

Untuk menyesuaikan bagaimana ruang cache dialokasikan, atur properti CacheType. Secara default, cache dialokasikan di memori dan ketika tidak ada lagi ruang yang tersedia di memori, ruangnya dialokasikan di disk. Perilaku ini ditangkap oleh mode Auto. Mode Auto fleksibel dan memaksimalkan kinerja. Terdapat juga mode lainnya:

  • mode CacheOnDiskOnly: dialokasikan hanya di disk.
  • mode CacheInMemoryOnly: dialokasikan hanya di memori.

Memilih mode CacheOnDiskOnly mungkin mengakibatkan kinerja yang buruk.

Menentukan Ukuran Cache

Atur ruang maksimum (dalam byte) yang dapat dialokasikan di disk atau memori dengan mengatur properti MaxDiskSpaceForCache dan MaxMemoryForCache secara berturut-turut. Secara default, kedua nilai tersebut diatur ke 0, yang berarti tidak ada batasan atasnya.

Mengendalikan Realokasi Cache

Jika tidak cukup ruang yang tersedia di memori (seperti yang ditentukan oleh properti MaxMemoryForCache) saat cache baru dialokasikan, cache tersebut dialokasikan ke disk. Jika tidak cukup ruang di disk, maka akan dilemparkan sebuah pengecualian. Proses alokasi cache berpindah dari memori ke disk tetapi tidak sebaliknya. Properti ExactReallocateOnly digunakan untuk mengendalikan realokasi memori. Realokasi kemungkinan besar terjadi untuk cache yang sudah dialokasikan sebelumnya. Hal ini dapat terjadi ketika sistem menyadari bahwa ruang yang dialokasikan tidak akan mencukupi. Jika ExactReallocateOnly diatur ke nilai default, False, ruang tersebut dialokasikan kembali ke medium yang sama. Ketika diatur ke True, realokasi tidak dapat melebihi ruang maksimum yang ditentukan. Dalam hal ini, cache di dalam memori yang sudah dialokasikan (yang membutuhkan realokasi) akan dibebaskan dan ruang tambahan dialokasikan di disk.

Contoh Program

String dataDir = Utils.getDataDir(ControllCacheReallocation.class) + "PSD/";
// 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.setCacheFolder(dataDir);
// Set cache on disk.
Cache.setCacheType(CacheType.CacheOnDiskOnly);
// The default cache max value is 0, which means that there is no upper limit
Cache.setMaxDiskSpaceForCache(1073741824); // 1 gigabyte
Cache.setMaxMemoryForCache(1073741824); // 1 gigabyte
// We do not recommend that you change the following property because it may greatly affect performance
Cache.setExactReallocateOnly(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.getAllocatedDiskBytesCount();
long l2 = Cache.getAllocatedMemoryBytesCount();
PsdOptions options = new PsdOptions();
Color[] color = {Color.getRed(), Color.getBlue(), Color.getBlack(), Color.getWhite()};
options.setPalette(new ColorPalette(color));
options.setSource(new StreamSource(new java.io.ByteArrayInputStream(new byte[0])));
try (RasterImage image = (RasterImage) Image.create(options, 100, 100)) {
Color[] pixels = new Color[10000];
for (int i = 0; i < pixels.length; i++) {
pixels[i] = Color.getWhite();
}
image.savePixels(image.getBounds(), pixels);
// After executing the code above 40000 bytes are allocated to disk.
long diskBytes = Cache.getAllocatedDiskBytesCount();
long memoryBytes = Cache.getAllocatedMemoryBytesCount();
// The allocation properties may be used to check whether all Aspose.PSD objects were properly disposed. If you've forgotten to call dispose on an object the cache values will not be 0.
l1 = Cache.getAllocatedDiskBytesCount();
l2 = Cache.getAllocatedMemoryBytesCount();
}