我认为原因是它正在从硬盘读取/加载每个文件,有些文件大小为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?也许更长的时间,但为什么程序有时冻结?我正在使用后台工作器来加载,但似乎有时它正在从硬盘读取文件并使程序冻结,直到它完成读取当前文件为止。
答案 0 :(得分:0)
如果问题是OpenPOP的MIME解析器很慢(并且它是according to my own benchmarks),您可以尝试切换到我的MimeKit库,这个速度要快得多(即速度提高25倍以上) )比OpenPOP。