کار با فایلهای 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 دست خودداری کنید تا به راحتی تمام شناسههای پیام موجود در یک پوشه را دریافت کنید.
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);
}
استفاده کنید جستجو بر اساس معیارفیلترینگ مبتنی بر - برای دریافت پیامهای مورد نیاز شما.
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"));
}