Werken met grote PST‑bestanden

Het verwerken van grote Personal Storage Table (PST)-bestanden kan de prestaties verminderen en het geheugengebruik verhogen. Aspose.Email voor Java biedt verschillende technieken en API’s die ontwikkelaars in staat stellen postvakgegevens efficiënt te benaderen, verwerken en beheren zonder systeembronnen te overbelasten.

Gebruik doorlopende methoden voor het doorlopen van mappen en berichten

Bij het doorlopen van mappen en berichten, geef de voorkeur aan methoden die retourneren Iterable. Dit vermindert het geheugenoverhead en verbetert de prestaties.

try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
    for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
        for (MessageInfo messageInfo : folder.enumerateMessages()) {
            // Process message
        }
    }
}

Gebruik MessageInfo voor basisbericht‑eigenschappen

Als je alleen basisberichtgegevens nodig hebt, gebruik dan MessageInfo in plaats van het volledige bericht te laden. Dit is sneller en verbruikt minder geheugen.

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());
}

Vermijd het extraheren van volledige berichten tenzij nodig

Gebruik niet ExtractMessage of EnumerateMapiMessages methoden voor alle berichten, tenzij u alle eigenschappen nodig heeft.

Overweeg in plaats daarvan:

a) Bericht‑ID’s ophalen

Gebruik enumerateMessagesEntryId om alle bericht‑ID’s in een map op te halen. U kunt vervolgens selectief eigenschappen, berichten of bijlagen extraheren.

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) Een enkele eigenschap extraheren

Gebruik ExtractProperty als u alleen een specifieke eigenschap nodig heeft die ontbreekt in 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) Alleen bijlagen extraheren

Als alleen bijlagen nodig zijn, gebruik dan ExtractAttachments.

for (String msgId : folder.enumerateMessagesEntryId()) {
    MapiAttachmentCollection attachments = pst.extractAttachments(msgId);
}

Gebruik zoekcriteria om berichten te filteren

Berichten filteren met behulp van zoekcriteria vermindert het aantal geladen berichten en verbetert de prestaties.

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());
    }
}

Berichten opslaan naar stream

In plaats van berichten één voor één te extraheren en op te slaan, gebruikt u SaveMessageToStream voor betere prestaties.

for (String id : folder.enumerateMessagesEntryId()) {
    try (OutputStream fos  = new FileOutputStream("message.msg")) {
        pst.saveMessageToStream(id, fos);
    }
}

Gebruik waar mogelijk bulkmethoden

Telkens wanneer u moet toevoegen of verwijderen meerdere items, geef de voorkeur aan bulkmethoden boven individuele bewerkingen. Dit vermindert overhead en verbetert de prestaties.