2009-11-03 31 views
1

在C#中,有没有一种方法可以让程序简单地“吃”大约20%的处理能力?换句话说,我希望我的CPU以80%的功耗运行。饮食处理能力

回答

3

快速背景微秒,毫秒或依赖秒:在现实中CPU是忙或没有,100%或0%。操作系统只是在短时间内进行平均运行,让您知道CPU的运行频率。

,如果你想为一个特定的核心做到这一点你没有指定,或者在所有CPU核心的平均...我将描述后者 - 你需要在1个线程中运行该代码每一个核心。

查看System.Diagnostics命名空间并查找性能计数器。

protected PerformanceCounter cpuCounter; 

cpuCounter = new PerformanceCounter(); 

cpuCounter.CategoryName = "Processor"; 
cpuCounter.CounterName = "% Processor Time"; 
cpuCounter.InstanceName = "_Total"; 

我可能会附加到“处理器”性能计数器(总计,不是每个核心)。您可能还想在代码中保持较短的运行平均值。

在for循环中,检查处理器使用情况的值,并取决于它是否接近您的阈值,睡眠的时间间隔更长或更短......(您可能会增加或减少睡眠延迟,具体取决于如何远离你是从理想的负载)

如果你正在运行的平均值,您的睡眠递增/递减值正确,程序应该对自身进行调整,以获得正确的负荷。

1

好了,你可以与切换为后2毫秒8毫秒的休眠功能的定时器无限循环。这不是“真正的20%”,但没有“真正的20%”这样的东西。你会在20%的时间内忙碌。

请注意,如果您拥有多核心CPU,您将需要一个线程每个核心可能使它忙的所有核心,以20%的CPU;也许加倍针对超线程......(你需要检查)

3

不完全使用C#,但如果你想设置你的CPU只使用80%可在windows电源选项进行设置。

alt text http://img43.imageshack.us/img43/7487/poweroptions.jpg

+0

这将让你的CPU下降到80%的好办法,但我认为它可能有比较略有不同的效果,更直接的方式。如从未造成理论程序入睡。 – Guvante

+0

我不认为这是适用于所有电脑.. – Earlz

+0

@earlz它应该在Vista和Win7。不知道XP。 – statenjason

2

步骤1:只要步骤1了睡眠4次:运行一个CPU密集环路定时需要多长时间运行
步骤2。
重复

您可以调整第一步采取什么类型的测量你正在做