Arbeiten mit großen PST‑Dateien
Contents
[
Hide
]
Die Leistung kann bei der Verarbeitung großer PST‑Dateien abnehmen. Die folgenden Lösungen helfen Ihnen, die Leistung Ihrer Anwendung beim Verarbeiten großer Speicherdateien zu verbessern.
Betrachten Sie Methoden, die zurückgeben
IEnumerable beim Durchlaufen von Ordnern oder Nachrichten in einer PST.
using var pst = PersonalStorage.FromFile(@"storage.pst");
foreach (var folder in pst.RootFolder.EnumerateFolders())
foreach (var messageInfo in folder.EnumerateMessages())
{
// Do something with message
}
Bevorzugen Sie MessageInfo zum Zugriff auf grundlegende Nachrichteneigenschaften.
foreach (var messageInfo in folder.EnumerateMessages())
{
Console.WriteLine($"Subject: {messageInfo.Subject}");
Console.WriteLine($"To: {messageInfo.DisplayTo}");
Console.WriteLine($"Importance: {messageInfo.Importance}");
Console.WriteLine($"Message Class: {messageInfo.MessageClass}");
}
Vermeiden Sie die Verwendung von ExtractMessage oder EnumerateMapiMessages Methoden für alle Nachrichten, es sei denn, Sie benötigen Zugriff auf alle Eigenschaften.
Erwägen Sie die Verwendung von EnumerateMessagesEntryId um einfach alle Nachrichten‑IDs, die in einem Ordner enthalten sind, abzurufen.
foreach (var id in folder.EnumerateMessagesEntryId())
{
// Use id to retrieve a property (ExtractProperty),
// extract a MapiMessage (ExtractMessage),
// extarct message attachments (ExtractAttachments),
// save msg to a stream(SaveMessageToStream).
}
Erwägen Sie die Verwendung von ExtractProperty um eine einzelne Eigenschaft zu lesen, die in MessageInfo fehlt.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var transportMessageHeaders =
pst.ExtractProperty(Convert.FromBase64String(msgId), KnownPropertyList.TransportMessageHeaders.Tag)
.GetString();
}
Erwägen Sie die Verwendung von ExtractAttachments falls nur die Anhänge benötigt werden.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var attachments = pst.ExtractAttachments(msgId);
}
Verwenden Suche nach Kriterien-basierte Filterung, um die gewünschten Nachrichten zu erhalten.
using var pst = PersonalStorage.FromFile(@"storage.pst");
var builder = new PersonalStorageQueryBuilder();
// Unread messages
builder.HasNoFlags(MapiMessageFlags.MSGFLAG_READ);
foreach (var folder in pst.RootFolder.EnumerateFolders())
{
var unread = folder.GetContents(builder.GetQuery());
}
Erwägen Sie die Verwendung von SaveMessageToStream falls es notwendig ist, Nachrichten aus einer PST zu speichern.
Statt zu verwenden:
foreach (var id in folder.EnumerateMessagesEntryId())
{
var msg = pst.ExtractMessage(id);
msg.Save(@"message.msg");
}
Verwenden Sie:
foreach (var id in folder.EnumerateMessagesEntryId())
{
pst.SaveMessageToStream(id, File.OpenWrite(@"message.msg"));
}
Bevorzugen Sie Bulk‑Methoden, um hinzufügen oder löschen mehrere Elemente.