2008-10-30 68 views
11

我正在开发一个C#程序,并且我有一个消耗太多CPU的函数。我想知道一种方法来通过代码(而不是任何外部应用程序)来控制它,并限制CPU使用率。 例如,如果它使用90%的CPU使用率,使我的应用程序仅消耗20%,即使速度变慢。它必须自动完成并从应用程序内完成。 如果你提供一堂课,那会很棒。如何限制C#程序的CPU使用率?

+0

这听起来像一个拐杖:攻击症状而不是问题。你为什么不发布该方法试图做什么,并要求我们帮助优化该方法。 – 2008-10-30 18:35:37

+1

它可能是一个拐杖,但我可以想到这个想法的几个应用程序,例如:一个CPU绑定的背景任务来紧缩数字,办公室PC的分布式计算环境中的一个节点,一个人工智能程序来监视和向我学习使用习惯。 – 2008-10-30 19:22:16

回答

16

我不知道你是否可以这样做,但可以通过Priority属性更改执行线程的线程优先级。你可以通过以下方式设置:

Thread.CurrentThread.Priority = ThreadPriority.Lowest; 

另外,我不认为你真的想要限制它。如果机器处于闲置状态,您希望它忙于处理任务,对吧? ThreadPriority可帮助将此信息传递给调度程序。

0

您可以通过调用循环内的Thread.Sleep(毫秒)来减慢循环。这将CPU交给调度器。

但是'消耗太多的CPU'让我觉得你可能有更多的基本问题。这个线程是否轮询并等待其他事情?如果是这样,你应该考虑使用事件或其他基于内核的信号机制。

0

我想你需要查询某种操作系统API来了解你有多少CPU正在使用,并从中进行节流决定(如Thread.Sleep)。