대용량 PST 파일 작업

Contents
[ ]

대용량 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
}
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}");
}
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).
}
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
   var transportMessageHeaders =
       pst.ExtractProperty(Convert.FromBase64String(msgId), KnownPropertyList.TransportMessageHeaders.Tag)
           .GetString();
}
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
   var attachments = pst.ExtractAttachments(msgId);
}
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());
}

다음 사용 대신:

foreach (var id in folder.EnumerateMessagesEntryId())
{
    var msg = pst.ExtractMessage(id);
    msg.Save(@"message.msg");
}

사용:

foreach (var id in folder.EnumerateMessagesEntryId())
{
    pst.SaveMessageToStream(id, File.OpenWrite(@"message.msg"));
}