Werken met grote PST‑bestanden
Contents
[
Hide
]
De prestaties kunnen afnemen bij het verwerken van grote PST‑bestanden. De volgende oplossingen helpen je de prestaties van je app te verbeteren bij het verwerken van grote opslagbestanden.
Overweeg methoden die teruggeven
IEnumerable bij het doorlopen van mappen of berichten in een 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
}
Prefereer MessageInfo voor het benaderen van basale berichteigenschappen.
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}");
}
Vermijd het gebruik van de ExtractMessage of EnumerateMapiMessages methoden voor alle berichten, tenzij je toegang tot alle eigenschappen nodig hebt.
Overweeg het gebruik van EnumerateMessagesEntryId om eenvoudig alle bericht‑ID’s in een map op te halen.
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).
}
Overweeg het gebruik van ExtractProperty om een enkele eigenschap te lezen die ontbreekt in MessageInfo.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var transportMessageHeaders =
pst.ExtractProperty(Convert.FromBase64String(msgId), KnownPropertyList.TransportMessageHeaders.Tag)
.GetString();
}
Overweeg het gebruik van ExtractAttachments als alleen de bijlagen nodig zijn.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var attachments = pst.ExtractAttachments(msgId);
}
Gebruik Zoeken op criteria-gebaseerde filtering om de berichten te krijgen die je nodig hebt.
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());
}
Overweeg het gebruik van SaveMessageToStream als het nodig is om berichten uit een PST op te slaan.
In plaats van gebruik te maken van:
foreach (var id in folder.EnumerateMessagesEntryId())
{
var msg = pst.ExtractMessage(id);
msg.Save(@"message.msg");
}
Gebruik:
foreach (var id in folder.EnumerateMessagesEntryId())
{
pst.SaveMessageToStream(id, File.OpenWrite(@"message.msg"));
}
Prefereer bulkmethoden om toevoegen of verwijderen meerdere items.