العمل مع ملفات 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"));
}