Travailler avec de gros fichiers PST
Contents
[
Hide
]
Les performances peuvent être dégradées lors du traitement de gros fichiers PST. Les solutions suivantes vous aideront à améliorer les performances de votre application lors du traitement de gros fichiers de stockage.
Envisagez des méthodes retournant
IEnumerable lors du parcours des dossiers ou des messages dans un 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
}
Privilégiez MessageInfo pour accéder aux propriétés de base du 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}");
}
Évitez d’utiliser le ExtractMessage ou EnumerateMapiMessages les méthodes pour tous les messages sauf si vous avez besoin d’accéder à toutes les propriétés.
Envisagez d’utiliser EnumerateMessagesEntryId pour récupérer facilement tous les ID de messages contenus dans un dossier.
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).
}
Envisagez d’utiliser ExtractProperty pour lire une propriété unique qui manque dans MessageInfo.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var transportMessageHeaders =
pst.ExtractProperty(Convert.FromBase64String(msgId), KnownPropertyList.TransportMessageHeaders.Tag)
.GetString();
}
Envisagez d’utiliser ExtractAttachments si seules les pièces jointes sont requises.
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var attachments = pst.ExtractAttachments(msgId);
}
Utiliser Rechercher par critèresfiltrage basé sur - pour obtenir les messages dont vous avez besoin.
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());
}
Envisagez d’utiliser SaveMessageToStream si vous devez enregistrer les messages depuis le pst.
Au lieu d’utiliser :
foreach (var id in folder.EnumerateMessagesEntryId())
{
var msg = pst.ExtractMessage(id);
msg.Save(@"message.msg");
}
Utilisez :
foreach (var id in folder.EnumerateMessagesEntryId())
{
pst.SaveMessageToStream(id, File.OpenWrite(@"message.msg"));
}