Bekerja dengan file PST besar
Memproses file Personal Storage Table (PST) yang besar dapat menurunkan kinerja dan meningkatkan penggunaan memori. Aspose.Email untuk Java menyediakan beberapa teknik dan API yang memungkinkan pengembang mengakses, memproses, dan mengelola data kotak surat secara efisien tanpa membebani sumber daya sistem.
Gunakan Metode Iterable untuk Menelusuri Folder dan Pesan
Saat mengiterasi folder dan pesan, lebih baik gunakan metode yang mengembalikan Iterable. Ini mengurangi beban memori dan meningkatkan kinerja.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
for (MessageInfo messageInfo : folder.enumerateMessages()) {
// Process message
}
}
}
Gunakan MessageInfo untuk Properti Pesan Dasar
Jika Anda hanya memerlukan detail pesan dasar, gunakan MessageInfo daripada memuat pesan penuh. Ini lebih cepat dan mengonsumsi memori lebih sedikit.
for (MessageInfo messageInfo : folder.enumerateMessages()) {
System.out.println("Subject: " + messageInfo.getSubject());
System.out.println("To: " + messageInfo.getDisplayTo());
System.out.println("Importance: " + messageInfo.getImportance());
System.out.println("Message Class: " + messageInfo.getMessageClass());
}
Hindari Mengekstrak Pesan Penuh Kecuali Diperlukan
Jangan gunakan ExtractMessage atau EnumerateMapiMessages metode untuk semua pesan kecuali Anda memerlukan semua properti.
Sebagai gantinya, pertimbangkan:
a) Mengambil ID Pesan
Gunakan enumerateMessagesEntryId untuk mendapatkan semua ID pesan dalam folder. Anda kemudian dapat mengekstrak properti, pesan, atau lampiran secara selektif.
for (String id : folder.enumerateMessagesEntryId()) {
// Retrieve a property using ID (extractProperty),
// Extract a MapiMessage (extractMessage),
// Extract message attachments (extractAttachments),
// Save message to a stream (saveMessageToStream).
}
b) Mengekstrak Satu Properti
Gunakan ExtractProperty jika Anda hanya membutuhkan properti spesifik yang hilang dalam MessageInfo.
for (String msgId : folder.enumerateMessagesEntryId()) {
String transportMessageHeaders =
pst.extractProperty(
org.apache.commons.codec.binary.Base64.decodeBase64(msgId),
KnownPropertyList.TRANSPORT_MESSAGE_HEADERS.getTag()
).getString();
}
c) Mengekstrak Hanya Lampiran
Jika hanya lampiran yang dibutuhkan, gunakan ExtractAttachments.
for (String msgId : folder.enumerateMessagesEntryId()) {
MapiAttachmentCollection attachments = pst.extractAttachments(msgId);
}
Gunakan Kriteria Pencarian untuk Menyaring Pesan
Menyaring pesan menggunakan kriteria pencarian mengurangi jumlah pesan yang dimuat dan meningkatkan kinerja.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();
// Unread messages
builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);
for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
MessageInfoCollection unread = folder.getContents(builder.getQuery());
}
}
Simpan Pesan ke Stream
Alih-alih mengekstrak dan menyimpan pesan satu per satu, gunakan SaveMessageToStream untuk kinerja yang lebih baik.
for (String id : folder.enumerateMessagesEntryId()) {
try (OutputStream fos = new FileOutputStream("message.msg")) {
pst.saveMessageToStream(id, fos);
}
}
Gunakan Metode Bulk Bila Memungkinkan
Setiap kali Anda perlu tambahkan atau hapus banyak item, lebih pilih metode bulk daripada operasi individual. Ini mengurangi overhead dan meningkatkan kinerja.