【问题标题】:C# limiting thread CPU usageC# 限制线程 CPU 使用率
【发布时间】:2012-04-12 14:31:18
【问题描述】:

已编辑:原来说两个问题,自己测试了一个,得到了答案。

我正在创建一个查看文件夹集中文件的线程读取器/写入器。它每 5 分钟执行一次,如果用户指定,则更少。

我当前的问题是线程会以有点贪婪的方式查看文件。我想将线程限制为最多使用 CPU 的 30%(或用户指定的数量,以防他们想要更快/更慢)。这样做的原因是这是一个应该始终打开的程序,我不希望它干扰他们浏览互联网或同时使用其他程序。我个人倾向于指出,使用 100% CPU 的线程程序会与其他程序发生冲突,即使它们被设置为较低的优先级,并且我正在努力避免这种情况。

我正在考虑使用 PerformanceCounter 检查 CPU 使用率,希望能识别程序,并在性能(整个 CPU 或我的程序发现它)开始达到峰值时添加更多的睡眠周期。我没有找到任何关于限制线程 CPU 使用率的文档,除了“大声笑,为什么要打扰?”,“不太可行”,没有任何理由(这完全可以 - 大多数人希望线程尽快完成,可能没有.Net 或其他 C# 库固有的方法)。

除了设置它的优先级较低或通过使用 PerformanceCounter/其他一些 CPU 监视器增加更多开销之外,有没有人知道其他方法?谢谢。

【问题讨论】:

  • 查看this答案
  • 你确定你的问题是 CPU 使用率而不是磁盘 I/O?
  • @MattBurland - 是的 - 即将发布。我刚刚进行了一些“CPU 绑定任务的最佳线程池深度”调查。我有 8/16/32/80/800 线程在我的 4/8 内核上以 100% 运行,但是由于池线程设置为“THREAD_PRIORITY_BELOW_NORMAL”,所以我的浏览器等都运行良好。
  • 谢谢你们,那我可能会试一试。
  • 让我觉得……似乎应该有一个特殊的线程优先级模式,让 CPU 保持在低功耗模式。我敢打赌,即使ThreadPriority.Lowest 也会将 CPU 的时钟速度提高到最大。

标签: c# multithreading backgroundworker


【解决方案1】:

我不确定您当前是如何监视文件夹的,但我认为您应该看看 FileSystemWatcher 类 (http://msdn.microsoft.com/en-us/library/system.io. filesystemwatcher.aspx)。

您可以将其设置为监视特定路径的更改,并且对 CPU 使用率非常低。它也是异步的(因此您甚至不需要单独的线程)。

【讨论】:

  • 谢谢,这可能是最好的答案,但这是在文件夹/txt 数据库中循环,并且会查看大量文件和子文件。如果它看起来太高,那么我会像往常一样每次 X 次都有相同的 CPU 出问题。如果它看起来太低,那么最终会有一百万个。
【解决方案2】:

不确定我是否理解正确。您每 5 分钟检查一次文件,并且检查(或它们的处理)占用了其他进程过多的 CPU 时间?

如果是这样,如何通过使用Thread.Sleep在处理之间(例如文件之间)暂停来减慢速度?

我真的不认为您应该担心一些最大 CPU 负载(另外,配置这对于用户来说可能很麻烦或令人困惑,因为对于多核 CPU,实际上 100% 的 cpu 使用并不总是很清楚,是 100%在一个核心上还是总共 100%?)。

暂停/睡眠的时间可能取决于到目前为止经过的时间量以及剩下的时间来做其他事情,例如您可以为每个文件保留 10 毫秒;如果处理时间为 4 毫秒,则睡眠时间为 6 毫秒。

如果您不断检查要检查的文件,请确保改用FileSystemWatcher,这应该可以解决您的问题。

【讨论】:

    【解决方案3】:

    CPU负载本身还不错,只要你不max out。 只需降低进程的优先级就可以了。如果还有其他优先级更高的进程,则优先处理。

    Process thisProc = Process.GetCurrentProcess();
      thisProc.PriorityClass = ProcessPriorityClass.BelowNormal;
    

    【讨论】:

      猜你喜欢
      • 2015-06-24
      • 2017-01-25
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多