Làm việc với các tệp PST lớn

Contents
[ ]

Hiệu năng có thể bị giảm khi xử lý các tệp PST lớn. Các giải pháp dưới đây sẽ giúp bạn cải thiện hiệu năng của ứng dụng khi xử lý các tệp lưu trữ lớn.

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

Thay vì sử dụng:

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

Sử dụng:

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