การทำงานกับไฟล์ PST ขนาดใหญ่
Contents
[
Hide
]
ประสิทธิภาพอาจลดลงเมื่อตั้งค่าไฟล์ PST ขนาดใหญ่ วิธีแก้ต่อไปนี้จะช่วยปรับปรุงประสิทธิภาพของแอปของคุณเมื่อตั้งค่าไฟล์จัดเก็บขนาดใหญ่.
พิจารณาเมธอดที่คืนค่า
IEnumerable เมื่อเรียกดูโฟลเดอร์หรือข้อความใน 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
}
แนะนำให้ใช้ MessageInfo เพื่อเข้าถึงคุณสมบัติพื้นฐานของข้อความ.
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}");
}
หลีกเลี่ยงการใช้ ExtractMessage หรือ EnumerateMapiMessages เมธอดสำหรับข้อความทั้งหมดเว้นแต่คุณต้องการเข้าถึงคุณสมบัติทั้งหมด.
พิจารณาใช้ EnumerateMessagesEntryId เพื่อดึง ID ของข้อความทั้งหมดในโฟลเดอร์ได้อย่างง่ายดาย.
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).
}
พิจารณาใช้ ExtractProperty เพื่ออ่านคุณสมบัติเพียงอย่างเดียวที่หายไปใน MessageInfo.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var transportMessageHeaders =
pst.ExtractProperty(Convert.FromBase64String(msgId), KnownPropertyList.TransportMessageHeaders.Tag)
.GetString();
}
พิจารณาใช้ ExtractAttachments หากต้องการเฉพาะไฟล์แนบเท่านั้น.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var attachments = pst.ExtractAttachments(msgId);
}
ใช้ Search by Criteriaการกรองแบบ -based เพื่อรับข้อความที่คุณต้องการ.
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());
}
พิจารณาใช้ SaveMessageToStream หากจำเป็นต้องบันทึกข้อความจาก PST.
แทนการใช้:
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"));
}