gpt4 book ai didi

c# - 优化 Outlook 加载项

转载 作者:太空宇宙 更新时间:2023-11-03 16:54:45 24 4
gpt4 key购买 nike

我的 Outlook 2007 插件运行良好,直到我不得不移动大量邮件。邮件列表是这样获取的

Items itemObj = lNamespace.GetFolderFromID(Settings.Default.InputFolder).Items;

List<MailItem> totalMailItems = new List<MailItem>();

foreach (MailItem mailItem in itemObj)
{
totalMailItems.Add(mailItem);
}

//Dispose of itemObj
itemObj = null;


MAPIFolder blueFold = lNamespace.GetFolderFromID(Settings.Default.BlueFolder);
MAPIFolder greenFold = lNamespace.GetFolderFromID(Settings.Default.GreenFolder);
MAPIFolder orangeFold = lNamespace.GetFolderFromID(Settings.Default.OrangeFolder);
MAPIFolder redFold = lNamespace.GetFolderFromID(Settings.Default.RedFolder);


foreach (MailItem mailItem in totalMailItems)
{
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;
}

xMail = null;
}

我将xMail 设置为mailItem 的原因是因为我不能使用mailItem 作为引用,它是只读的。该程序的其余部分现在运行良好,我只是想弄清楚如何更快地移动这些项目。我必须先调用 Save 吗?或者这只是一个额外的电话?

最佳答案

我不确定您实际移动了多少邮件,所以我假设很多。

可能是问题的一件事是 Save() 方法可能是您代码中的瓶颈。我在将文件复制到多个位置的 excel 加载项中遇到了类似类型的问题。提高速度并保持 excel 响应的解决方案是使用异步委托(delegate)调用,如 Give Your .NET-based Application a Fast and Responsive UI with Multiple Threads 中所述。 .

所以在您的示例中,我会将循环的内容包装在 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;
}
}

关于c# - 优化 Outlook 加载项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2552738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com