2009-05-04 11 views
0

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

基本的にはです:

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を使用しています。 Or MapiTablesを使用すると、プロパティを取得する最も早い方法です。ただし、この場合は注意が必要です。プロセス内で、テーブルに取り込むことができます。

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

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

+0

私は追加のライセンスを購入することを避けることを望んでいましたが、これは間違いなく可能性があります。ありがとう! – McAden

+0

CDOは無料のMS libなどです。www.cdolive.com上記のようにOOMのように見えるので、あなたはプロセスを使わなくてはならないでしょう。あなたは直接交換に接続し、商品を扱います。 – 76mel

+0

Oohは2007年にOutlookテーブルがあることを忘れています...これはデータを入手する最も速い方法です http://msdn.microsoft.com/en-us/library /bb147822.aspx string filter = ""; Outlook.Table inboxTable = inboxFolder.GetTable(filter、Outlook.OlTableContents.olUserItems); フィルタを使用して、必要なものを選択し、必要のないものを選択します。 – 76mel

1

を使用していますが、最新のOffice 2007のサービスパックが大量のメッセージとOutlookのsynificantパフォーマンスの差(改善)を作りました。

+0

ああ、一週間以上前に出てきました。それを試してみる。 – McAden

+0

5~10%改善。 これ以上のことは望めましたが、それは何かです。ヘッドアップをありがとう。私はメールアイテムにアクセスするための何らかの他の方法を望んでいましたが、OutlookのI/Oに縛られているように見えます。 – McAden

0

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

あらゆる種類のUIアップデートは非常に高価です。テキストを書き出したり、プログレスバーを増やしている場合は、控えめにするのが最善です。

+0

私は何をしようとしているのか、私は解析と処理をしています。 しかし、質問は上記のコードに関するものです。純粋な割り当て(私の処理はコメントアウトされています)はおよそ100-130秒かかります。処理には190秒かかります。これはすべてバックエンドです。 – McAden

0

我々はフォルダがローカルであり、何のネットワーク遅延がなかったとしても、正確に同じ問題を抱えていました。

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

ユーザーのラグを完全に排除するために、Outlookスレッドから検索を取り出して、それを独自のスレッドに入れました。遅れの認識は実際の遅れよりも悪かった。

関連する問題