【发布时间】: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