0

Outlook 2007 で電子メールを解析しようとしています。できるだけ早く効率化する必要があり、問題が発生しているようです。

基本的には次のとおりです。

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 を使用しています

4

5 に答える 5

1

この種のことを行うには、アイテムごとに交換ストアからデータを取得する必要があるため、時間がかかります。

ここにはいくつかのオプションがあると思います..

この情報を帯域外で処理し、他のプロセスで CDO/RDO を使用します。または、これがプロパティを取得する最速の方法であるため、MapiTables を使用してください。

償還ラッパー - http://www.dimastr.com/redemption/mapitable.htm

MAPI テーブルhttp://msdn.microsoft.com/en-us/library/cc842056.aspx

于 2009-05-06T12:14:39.413 に答える
0

フォルダーがローカルにあり、ネットワークの遅延がない場合でも、まったく同じ問題が発生しました。

必要な検索用に調整されたローカルの Sql Server CE テーブルにすべての電子メールのコピーを保存することで、10 倍のスピードアップを実現しました。また、更新イベントを使用して、ローカル データベースが Outlook/Exchange フォルダーと同期していることを確認しました。

ユーザーの遅延を完全に解消するために、検索を Outlook スレッドから取り出し、独自のスレッドに配置しました。遅延の認識は、実際の遅延よりも悪いものでした。

于 2009-05-13T17:18:34.180 に答える
0

このループでこれらの文字列を読み取っているだけですか、それとも文字列を読み取って処理してから次の処理に進んでいますか? ループ内ですべてのメッセージを HashTable に読み込んで、ロード後に処理することもできます。

どの種類の UI 更新も非常にコストがかかります。テキストを書き出す場合やプログレス バーをインクリメントする場合は、慎重に行うことをお勧めします。

于 2009-05-04T23:31:24.093 に答える