为什么在使用后台工作程序从硬盘读取文件时有时会冻结程序?

时间:2016-02-18 22:51:59

标签: c# .net winforms openpop

我认为原因是它正在从硬盘读取/加载每个文件,有些文件大小为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?也许更长的时间,但为什么程序有时冻结?我正在使用后台工作器来加载,但似乎有时它正在从硬盘读取文件并使程序冻结,直到它完成读取当前文件为止。

1 个答案:

答案 0 :(得分:0)

如果问题是OpenPOP的MIME解析器很慢(并且它是according to my own benchmarks),您可以尝试切换到我的MimeKit库,这个速度要快得多(即速度提高25倍以上) )比OpenPOP。