その理由は、ハードディスクから各ファイルを読み取り/ロードしているためだと思います。いくつかのファイルサイズは8.5MBです。OpenPopを使用して、pop3メールプロバイダーからダウンロードして保存したeml(メール)ファイルをロードしています。
現在、ハードディスクには7000を超えるemlファイルがあり、約8.5MB、約23KBです。
int countUploadMsg = 0;
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
int counter = 0;
allLoadedMessages = new List<OpenPop.Mime.Message>();
OpenPop.Mime.Message loadedMessage = null;
DirectoryInfo di = new DirectoryInfo(@"e:\testmail\");
FileInfo[] files = di.GetFiles();
foreach (FileInfo file in files)
{
loadedMessage = OpenPop.Mime.Message.Load(file);
allLoadedMessages.Add(loadedMessage);
counter += 1;
int nProgress = counter * 100 / files.Length;
backgroundWorker2.ReportProgress(nProgress);
}
}
確かに問題はこの行にあります:
loadedMessage = OpenPop.Mime.Message.Load(file);
OpenPop ライブラリの Load 部分を使用します。
時間がかかっているのかもしれませんが、私が試したほど速くはありませんが、これまでのところ、より高速な eml ファイルリーダー/パーサーは見つかりませんでした。
私の質問は、コードがバックグラウンドワーカーの DoWork イベント内にある場合、一部のファイルでプログラムが数秒間停止/フリーズすることがあるのはなぜですか? backgroundworker を使用するとスムーズに動作するはずではありませんか? たぶんもっと長い時間ですが、なぜプログラムが時々フリーズするのですか? ロードにバックグラウンドワーカーを使用していますが、ハードディスクからファイルを読み取っていて、現在のファイルの読み取りが完了するまでプログラムがフリーズすることがあるようです。