Práce s velkými soubory PST
Contents
[
Hide
]
Výkon může být při zpracování velkých souborů PST snížen. Následující řešení vám pomohou zlepšit výkon vaší aplikace při práci s velkými soubory úložiště.
Zvažte metody vracející
IEnumerable při procházení složek nebo zpráv v 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
}
Upřednostněte MessageInfo pro přístup k základním vlastnostem zprávy.
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}");
}
Vyhněte se používání ExtractMessage nebo EnumerateMapiMessages metody pro všechny zprávy, pokud nepotřebujete přístup ke všem vlastnostem.
Zvažte použití EnumerateMessagesEntryId pro snadné získání všech ID zpráv obsažených ve složce.
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).
}
Zvažte použití ExtractProperty pro načtení jediné vlastnosti, která chybí v MessageInfo.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var transportMessageHeaders =
pst.ExtractProperty(Convert.FromBase64String(msgId), KnownPropertyList.TransportMessageHeaders.Tag)
.GetString();
}
Zvažte použití ExtractAttachments pokud jsou požadovány jen přílohy.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var attachments = pst.ExtractAttachments(msgId);
}
Použijte Vyhledávání podle kritériífiltrování založené na ID pro získání požadovaných zpráv.
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());
}
Zvažte použití SaveMessageToStream pokud je nutné uložit zprávy z PST.
Místo použití:
foreach (var id in folder.EnumerateMessagesEntryId())
{
var msg = pst.ExtractMessage(id);
msg.Save(@"message.msg");
}
Použijte:
foreach (var id in folder.EnumerateMessagesEntryId())
{
pst.SaveMessageToStream(id, File.OpenWrite(@"message.msg"));
}