2009-08-22 99 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; 
     } 
    } 

您可以使用較小的數字來獲得更穩定的負載....只要比例是任何你想要的。這隻會使用一個核心,所以你可能必須在多個線程中完成這個任務。