1

その理由は、ハードディスクから各ファイルを読み取り/ロードしているためだと思います。いくつかのファイルサイズは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 を使用するとスムーズに動作するはずではありませんか? たぶんもっと長い時間ですが、なぜプログラムが時々フリーズするのですか? ロードにバックグラウンドワーカーを使用していますが、ハードディスクからファイルを読み取っていて、現在のファイルの読み取りが完了するまでプログラムがフリーズすることがあるようです。

4

1 に答える 1

0

問題が OpenPOP の MIME パーサーが遅いことである場合 (私自身のベンチマークによると)、OpenPOPよりも大幅に高速 (つまり 25 倍以上)の私のMimeKitライブラリに切り替えてみてください。

于 2016-03-10T20:09:25.520 に答える