BackgroundWorker和CPU使用问题

本文关键字:问题 CPU BackgroundWorker | 更新日期: 2023-09-27 18:10:37

我想遍历计算机中的所有文件并将文件名保存到一个文本文件中。为了避免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%以上

BackgroundWorker和CPU使用问题

你的后台进程使用100%的CPU是没有问题的,只要它不阻塞任何其他需要它的东西。

例如,在Windows中,当进程占用100% CPU时,您按Ctrl+Alt+Delete,显然应该优先考虑。如果它(几乎)立即显示锁定屏幕,那么就没有问题了。

如果在你的流程完成之前它没有做任何事情,那么你就有大问题了,这就是你需要调查的时候。否则就别担心了!