我已经实现了元启发式求解器并使用了.NET 4.0 Parallel.For
和Parallel.Foreach
。
它在我的中端机器上运行罚款。但搜索过于强化,消耗的资源太多,尤其是低端机器上的CPU时间。
所以我认为我必须在需要时选择调低搜索强度。我希望在没有太多触摸算法的情况下降低CPU利用率。如果搜索完成得更慢,只要它不会锁定机器并允许其他工作放在一边就可以了。
我正在考虑将Thread.Sleep
放在方法上,因为所有线程都是100%CPU绑定(没有I / O)。这会降低我需要的CPU使用强度吗?有没有更好的解决方案?
答案 0 :(得分:0)
(坚持在栏杆上方,准备用许多downvotes击落......)。
如果您使用不同的线程,我建议如下:
Thread.Priority = ThreadPriority.BelowNormal
因此线程的优先级降低。
[是的,这是C Sharper答案的直接副本,但没有后来关于线程池线程和亲和力避免的编辑。如果你认为这是个好主意 - upvote C Sharper,而不是我。
或者,使用任务管理器或其他方法降低整个过程的优先级。这将减少进程中所有线程的“真实”调度优先级(包括“非常糟糕的主题”线程池线程),并改善其他非CPU密集型应用程序的用户体验,但应在需要时快速响应做某事。优先级较低的重型应用程序仍将吸收剩余的所有CPU,如果您决定不编辑本月的销售数据或观看最新下载的非法版权影片,则表现优于正常优先级。
答案 1 :(得分:-1)
如果您使用不同的线程,我建议如下:
Thread.Priority = ThreadPriority.BelowNormal
因此线程的优先级降低。
好的,这个解决方案只有在不与ThreadPool一起使用的情况下才可以接受。
这里我不确定,但最新消息:
Process.ProcessorAffinity
如果我们限制核心,我们可以为其他工作获得更多空间,对吧?