Bekerja dengan File PST Besar
Contents
[
Hide
]
Kinerja dapat menurun saat memproses file PST besar. Solusi berikut akan membantu Anda meningkatkan kinerja aplikasi saat memproses file penyimpanan besar.
Pertimbangkan metode yang mengembalikan
IEnumerable saat menelusuri folder atau pesan dalam 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
}
Lebih baik MessageInfo untuk mengakses properti pesan dasar.
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}");
}
Hindari penggunaan ExtractMessage atau EnumerateMapiMessages metode untuk semua pesan kecuali Anda perlu mengakses semua properti.
Pertimbangkan menggunakan EnumerateMessagesEntryId untuk dengan mudah mengambil semua ID pesan yang terdapat dalam folder.
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).
}
Pertimbangkan menggunakan ExtractProperty untuk membaca satu properti yang hilang di MessageInfo.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var transportMessageHeaders =
pst.ExtractProperty(Convert.FromBase64String(msgId), KnownPropertyList.TransportMessageHeaders.Tag)
.GetString();
}
Pertimbangkan menggunakan ExtractAttachments jika hanya lampiran yang dibutuhkan.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var attachments = pst.ExtractAttachments(msgId);
}
Gunakan Cari berdasarkan Kriteriapenyaringan berbasis - untuk mendapatkan pesan yang Anda butuhkan.
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());
}
Pertimbangkan menggunakan SaveMessageToStream jika diperlukan untuk menyimpan pesan dari PST.
Alih-alih menggunakan:
foreach (var id in folder.EnumerateMessagesEntryId())
{
var msg = pst.ExtractMessage(id);
msg.Save(@"message.msg");
}
Gunakan:
foreach (var id in folder.EnumerateMessagesEntryId())
{
pst.SaveMessageToStream(id, File.OpenWrite(@"message.msg"));
}