吃掉处理能力

时间:2009-11-03 22:57:14

标签: c# multithreading

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

5 个答案:

答案 0 :(得分:3)

不完全使用C#,但是如果你想将你的cpu设置为仅使用80%,则可以在windows power options中设置它。

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

答案 1 :(得分:3)

快速背景:实际上CPU是忙还是不忙,100%或0%。操作系统只需在很短的时间内完成运行平均值,就可以了解CPU的运行频率。

您没有指定是否要为特定核心执行此操作,或者作为所有CPU核心的平均值...我将描述后者 - 您需要在每个线程中运行此代码芯

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

protected PerformanceCounter cpuCounter;

cpuCounter = new PerformanceCounter();

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

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

在你的for循环中,检查你的处理器使用率的值,并根据它是否接近你的阈值,睡眠时间更长或更短...(你可能会或多或少地增加/减少你的睡眠延迟取决于如何很远,你是理想的负荷)

如果你得到了运行平均值,并且你的睡眠增量/减量值正确,你的程序应该自我调整以获得正确的负载。

答案 2 :(得分:2)

我认为这是针对某种形式的模拟负载测试? Here's one example

答案 3 :(得分:2)

步骤1:运行cpu密集循环计时运行多长时间 第2步:与第1步一样,睡4次 重复

您可以将step1调整为微秒,毫秒或秒,具体取决于您正在进行的测量类型

答案 4 :(得分:1)

好吧,你可以使用一个定时器进行无限循环,该定时器在2毫秒后切换睡眠功能8毫秒。它不是“真正的20%”,但没有“真正的20%”这样的东西。你只会在20%的时间里忙碌。

请注意,如果你有多核cpu,你需要为每个核心提供一个线程,这可能会使所有核心忙于20%cpu;也许是HyperThreading的两倍...(你需要检查)