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.