2009-05-04 75 views
0

我试图通过Outlook 2007中的电子邮件进行分析。我需要尽快简化它,似乎遇到了一些麻烦。Outlook 2007 MailItem信息 - 慢

基本上它是:

foreach(Folder fld in outllookApp.Session.Folders) 
{ 
    foreach(MailItem mailItem in fld) 
    { 
     string body = mailItem.Body; 
    } 
} 

和5000的电子邮件,这需要超过100秒。在我看来,这似乎不应该接近这么长时间。

如果我添加:

string entry = mailItem.EntryID; 

它结束了作为一个额外的30秒。

我做各种各样的字符串操作,包括与这些字符串正则表达式和写出数据库,仍然,那些2线把我的运行时间的50%。

我使用Visual Studio 2008的

回答

1

做这种事情需要很长时间,因为您必须从每个项目的交换存储中提取数据。

我认为你有几个选择..

过程中其他一些处理这个信息,带外使用CDO/RDO的。 或 使用MapiTables,因为这是获得属性的最快方式,但有些警告,你可能会在你的processin中执行一些可以放入表的东西。

赎回包装 - http://www.dimastr.com/redemption/mapitable.htm

MAPI表http://msdn.microsoft.com/en-us/library/cc842056.aspx

1

我不知道这是否会满足您的特定问题,但最新的Office 2007服务包作出了synificant性能差异(改善)对Outlook使用大量邮件。

+0

啊,一个多星期前出来了。尝试一下。 – McAden 2009-05-04 23:35:56

+0

改善5-10%。 本来希望有更多,但它是一些东西。感谢您的提醒。我希望以某种其他方式访问邮件项目,但看起来我受Outlook上的I/O绑定。 – McAden 2009-05-04 23:59:13

0

你是只是阅读这个循环中的字符串,或者你正在阅读一个字符串,处理它,然后移动到下一个?您可以尝试将所有消息读入循环内的HashTable,然后在加载后处理它们 - 它可能会为您带来一些收益。

任何种类的UI更新都非常昂贵;如果你写出文本或增加进度条,最好少用一些。

+0

最后我正在做的解析和处理。 但是,问题仅仅是关于上面的代码。纯粹的任务(我的处理被注释掉)大约需要100-130秒。处理需要190秒。所有这些都是后端。 – McAden 2009-05-04 23:35:24

0

我们有完全相同的问题,即使文件夹是本地,也没有网络延迟。

我们通过存储的每封电子邮件的副本调整为我们所需要的搜索本地SQL Server CE表得到了10倍的速度提升。我们还使用更新事件来确保本地数据库与Outlook/Exchange文件夹保持同步。

为了完全消除用户滞后,我们将搜索从Outlook线程中提取出来并放入其自己的线程中。滞后的看法比看起来的实际拖延更糟糕。