我想遍历计算机中的所有文件并将文件名保存到文本文件中。为了避免UI阻塞,我在后台工作者中使用它。下面的代码工作正常。但是,CPU使用率太高。有时它高于60%
private void filelistmanagementWorker_DoWork(object sender, DoWorkEventArgs e)
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
List<string> directoryList = new List<string>();
foreach (DriveInfo d in allDrives)
{
if (d.IsReady)
{
ApplyAllFiles(d.Name, ProcessFile);
}
}
// iterate over all personal folders
foreach (Environment.SpecialFolder s in Enum.GetValues(typeof(Environment.SpecialFolder)))
{
string pth = Environment.GetFolderPath(s);
ApplyAllFiles(pth, ProcessFile);
}
}
private void ApplyAllFiles(string folder, Action<string> fileAction)
{
try
{
foreach (string file in Directory.GetFiles(folder))
{
fileAction(file);
}
foreach (string subDir in Directory.GetDirectories(folder))
{
try
{
ApplyAllFiles(subDir, fileAction);
}
catch
{
// swallow, log, whatever
}
}
}
catch (Exception E) { }
}
private void ProcessFile(string path)
{
//MessageBox.Show("1");
// logic
path = path.Replace(":","");
path = path.Replace("\\", "/");
// MessageBox.Show(path.Replace("\\", "/"));
if (!path.Contains("Recycle"))
{
try
{
File.AppendAllText("allFilesList.txt", path + "@!@");
}
catch (Exception Ed) {
// MessageBox.Show(Ed.Message);
}
}
}
问题:如何减少CPU使用率。它目前高于60%
答案 0 :(得分:0)
使用100%的CPU后台进程没有任何问题,只要它不会阻止任何其他需要它的东西。
例如在Windows中,当进程使用100%CPU并按Ctrl + Alt + Delete时,显然应该优先考虑。如果它(几乎)立即显示锁定屏幕,则没有问题。
如果在您的流程完成之前没有做任何事情,那么您就会遇到一个大问题,那就是您需要调查的时间。否则不要担心!