为什么当使用后台工作者从硬盘读取文件时,有时程序会冻结
本文关键字:文件 程序 冻结 读取 硬盘 后台 工作者 为什么 | 更新日期: 2023-09-27 18:35:14
我认为原因是它从硬盘读取/加载每个文件 有些文件大小为 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库的加载部分。
所以也许这需要时间,我尝试的不是那么快,但到目前为止我没有找到更快的 eml 文件阅读器/解析器。
我的问题是,如果代码位于后台工作者的DoWork事件中,为什么有时程序在某些文件上停止/冻结几秒钟?使用后台工作者不是应该顺利工作吗?也许更长的时间,但为什么程序有时会冻结?我正在使用后台工人进行加载,但似乎有时它会从硬盘读取文件并使程序冻结,直到它完成读取当前文件。
如果问题是OpenPOP的MIME解析器很慢(这是根据我自己的基准测试),你可以尝试切换到我的MimeKit库,它比OpenPOP快得多(即快25倍以上)。