1

我已经实现了元启发式求解器并使用了 .NET 4.0Parallel.ForParallel.Foreach. 它在我的中端机器上运行良好。但是搜索过于激烈,消耗太多资源,尤其是低端机器上的CPU时间。

因此,我认为我必须在需要时选择降低搜索强度。我想在不涉及算法的情况下降低 CPU 利用率。如果搜索完成较慢,只要它不会锁定机器并允许其他工作搁置,就可以了。

我正在考虑Thread.Sleep使用方法,因为所有线程都是 100% CPU 绑定(无 I/O)。这会降低我需要的 CPU 使用强度吗?有没有更好的解决方案?

4

2 回答 2

-1

(把头顶在栏杆上方,准备被许多反对票击落..:)

如果您使用不同的线程,我建议如下:

Thread.Priority = ThreadPriority.BelowNormal

所以线程的优先级较低。

[是的,这是 C Sharper 答案的直接副本,但没有后来关于线程池线程和亲和力的编辑。如果您认为这是个好主意 - 支持 C Sharper,而不是我]。

或者,通过任务管理器或其他方式降低整个进程的优先级。这将降低进程中所有线程的“真正”调度优先级(包括“非常糟糕的”线程池线程),并改善其他非 CPU 密集型但应在需要时快速响应的应用程序的用户体验做某事。较低优先级的重度应用程序仍会占用所有剩余的 CPU,如果您决定不编辑本月的销售数据或观看最新的非法下载的版权电影,其性能将与以正常优先级运行时一样好。

于 2012-09-13T07:14:28.923 回答
-1

如果您使用不同的线程,我建议如下:

Thread.Priority = ThreadPriority.BelowNormal

所以线程的优先级较低。

编辑

好的,这个解决方案只有在不与 ThreadPool 一起使用时才可接受。

这里我不确定,但是关于:

Process.ProcessorAffinity
  • 获取或设置可以安排在其上运行此进程中的线程的处理器。

如果我们限制核心,我们就有更多的空间来做其他工作,对吧?

于 2012-09-12T19:23:41.063 回答