2009-08-22 94 views
6

我正在寻找在某些CPU使用情况下在几台机器上测试系统响应能力等。不幸的是,我只能创建〜100%的使用率(无限循环)或没有足够的CPU使用率(我正在使用C#)。C#:在自定义百分比处创建CPU使用率

有没有什么办法,粗略近似,其他任务也在系统上运行,以20,30,40%(等等)的步骤人为创建CPU使用率?

我明白,系统之间存在差异,很明显,CPU的差异。它更多的是关于可定制的CPU密集型计算的算法/想法,它可以在当前的CPU上创建足够的使用率,而不用最大限度地利用它,我可以调整它们,然后以某种方式调整它们以创建所需的百分比。

回答

4

您可以添加一个线程计时器,该计时器在间隔中醒来并执行一些工作。然后调整工作的时间间隔和数量,直到您接近所需的负载。

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); 
    } 

alt text http://i32.tinypic.com/15f4tp5.png

有了这一点,调整环路我能20%,60%和满载添加到我的系统的价值。它将使用额外的线程来扩展多个内核以获得更均匀的负载。

0

没有这样做 - 但你可以尝试制定在多个程序中运行的优先级线程。

0

当您尝试使用睡眠时,您是否喜欢这样做,或者只是将睡眠放在实际循环中? 我认为这会奏效。

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 
    } 
} 
4

然后呢?

DateTime lastSleep = DateTime.Now;    
    while (true) 
    { 
     TimeSpan span = DateTime.Now - lastSleep; 
     if (span.TotalMilliseconds > 700) 
     { 
      Thread.Sleep(300); 
      lastSleep = DateTime.Now; 
     } 
    } 

您可以使用较小的数字来获得更稳定的负载....只要比例是任何你想要的。这只会使用一个核心,所以你可能必须在多个线程中完成这个任务。