Я не уверен, сколько почтовых отправлений вы на самом деле перемещаете, поэтому я буду считать, что много.
Единственное, что может быть проблемой, это то, что Save()
метод может быть узким местом в вашем коде. У меня была похожая проблема с надстройкой Excel, которая копировала файлы в несколько мест. Решением для повышения скорости и обеспечения быстрого реагирования на Excel было использование Asynchronous Delegate Invocation, как описано в Предоставление вашему .NET-приложению быстрого и отзывчивого интерфейса с несколькими потоками .
Так что в вашем примере я бы обернул содержимое цикла на totalMailItems
. Обратите внимание, что приведенный ниже код может быть не на 100% правильным, но я надеюсь, что вам хватит идеи и руководства, которые помогут вам.
private delegate void SaveEmail(MailItem mailItem);
foreach (MailItem mailItem in totalMailItems)
{
SaveEmail save = SaveMailItem;
IAsyncResult saveResult = save.BeginInvoke(mailItem, SaveCallBack, "MailItem Saved")
xMail = null;
}
private void SaveCallBack(IAsyncResult result)
{ // do stuff here if you want to... }
private void SaveMailItem(MailItem mailItem)
{
MailItem xMail = mailItem;
MessageRelevance mRel = new MessageRelevance();
mRel = Process_MailItem(ref xMail);
xMail.Save();
switch(mRel)
{
case MessageRelevance.Red:
xMail.Move(redFold);
_lvl2++;
break;
case MessageRelevance.Orange:
xMail.Move(orangeFold);
_lvl1++;
break;
case MessageRelevance.Blue:
xMail.Move(blueFold);
_nullLev++;
break;
case MessageRelevance.Green:
xMail.Move(greenFold);
_lvl0++;
break;
}
}