C#:以自定义百分比创建 CPU 使用率
Posted
技术标签:
【中文标题】C#:以自定义百分比创建 CPU 使用率【英文标题】:C#: Create CPU Usage at Custom Percentage 【发布时间】:2009-08-22 10:10:32 【问题描述】:我希望在某些 CPU 使用条件下在几台机器上测试系统响应能力等。不幸的是,我只能创建 ~100% 的使用率(无限循环)或没有足够的 CPU 使用率(我正在使用 C#)。
有什么方法可以粗略地估算,因为其他任务也在系统上运行,以 20%、30%、40%(等等)的步长人为地创建 CPU 使用率?
我了解系统之间存在差异,显然,因为 CPU 的不同。它更多的是关于可定制 CPU 密集型计算的算法/想法,这些计算在当前 CPU 上创造足够的使用率,而不会最大化它,我可以对其进行调整,然后以某种方式调整它们以创建所需的百分比。
【问题讨论】:
【参考方案1】:然后呢?
DateTime lastSleep = DateTime.Now;
while (true)
TimeSpan span = DateTime.Now - lastSleep;
if (span.TotalMilliseconds > 700)
Thread.Sleep(300);
lastSleep = DateTime.Now;
您可以使用较小的数字来获得更稳定的负载....只要比率是您想要的。但这确实只使用一个内核,因此您可能必须在多个线程中执行此操作。
【讨论】:
【参考方案2】:您可以添加一个线程定时器,它会在一定时间间隔内唤醒并执行一些工作。然后调整工作间隔和工作量,直到接近所需的负载。
private void button1_Click(object sender, EventArgs e)
m_timer = new Timer(DoWork);
m_timer.Change(TimeSpan.Zero, TimeSpan.FromMilliseconds(10));
private static void DoWork(object state)
long j = 0;
for (int i = 0; i < 2000000; i++)
j += 1;
Console.WriteLine(j);
通过调整循环的值,我能够为我的系统增加 20%、60% 和满负荷。它将使用额外的线程扩展到多个内核以实现更均匀的负载。
【讨论】:
【参考方案3】:The utility provides a simple slider bar user interface that allows you to place an arbitrary load on the processor(s) in your system. Automatically detects and handles multiple processors.
今天早上下载它时对我来说效果很好。
【讨论】:
【参考方案4】:这是一个函数,它利用所有可用的处理器/内核达到可自定义的百分比,并且可以随时被调用代码取消。
private static CancellationTokenSource StressCPU(int percent)
if (percent < 0 || percent > 100) throw new ArgumentException(nameof(percent));
var cts = new CancellationTokenSource();
for (int i = 0; i < Environment.ProcessorCount; i++)
new Thread(() =>
var stopwatch = new Stopwatch();
while (!cts.IsCancellationRequested)
stopwatch.Restart();
while (stopwatch.ElapsedMilliseconds < percent) // hard work
Thread.Sleep(100 - percent); // chill out
).Start();
return cts;
使用示例:
var cts = StressCPU(50);
Thread.Sleep(15000);
cts.Cancel();
结果:
【讨论】:
【参考方案5】:没有这样做 - 但您可以尝试计算在多个程序中运行的优先线程。
【讨论】:
【参考方案6】:当您尝试使用睡眠时,您是这样做还是只是将睡眠放入实际循环中? 我认为这会奏效。
while(true)
Thread.Sleep(0);
for(int i=0;i<veryLargeNumber; i++)
//maybe add more loops here if looping to veryLargeNumber goes to quickly
//also maybe add some dummy operation so the compiler doesn't optimize the loop away
【讨论】:
以上是关于C#:以自定义百分比创建 CPU 使用率的主要内容,如果未能解决你的问题,请参考以下文章
Zabbix3.0.4监控Windows的CPU使用百分比并在CPU使用率超过90%触发报警