1

我认为原因是它正在从硬盘读取/加载每个文件一些文件大小为 8.5MB 我正在使用 OpenPop 加载我从我的 pop3 电子邮件提供商下载并保存的 eml(emails) 文件。

现在在硬盘上我有超过 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 解析器很慢(并且它是根据我自己的基准测试的),您可以尝试切换到我的MimeKit库,它比 OpenPOP 快得多(即快 25 倍以上)。

于 2016-03-10T20:09:25.520 回答