2009-05-04 79 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線程中提取出來並放入其自己的線程中。滯後的看法比看起來的實際拖延更糟糕。