繁体   English   中英

消耗处理能力

[英]Eating up processing power

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

不完全使用C#,但是如果要将cpu设置为仅使用80%,则可以在Windows电源选项中进行设置。

替代文字http://img43.imageshack.us/img43/7487/poweroptions.jpg

快速背景:实际上,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步:运行CPU密集循环计时,需要运行多长时间
步骤2:只要执行步骤1,就睡4次。
重复

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

好吧,您可以使用计时器进行无限循环,该计时器可以在2毫秒后将睡眠功能切换8毫秒。 这不是“真实20%”,但没有“真实20%”之类的东西。 您只会使它忙20%的时间。

请注意,如果您有多核cpu,则每个核可能都需要一个线程,以使所有核都繁忙到20%cpu。 也许为HyperThreading加倍...(您需要检查)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM