2010-04-09 44 views
2

我有一個基準測試程序,用於計算持續到Entity Framework 4.0的時間(以毫秒和滴答聲)。有沒有辦法計算CPU負載?我猜測我需要查詢Windows以查明我的CPU頻率,多少內核等等。這聽起來是對的嗎?如果是這樣,.NET框架的哪一部分與查詢系統有關?我在猜測System.Diagnostics?如何以編程方式計算CPU利用率?

感謝,

斯科特

+0

您是否需要測量系統或每個進程的CPU總時間? – 2010-04-09 15:38:35

+0

嘿桑德!我希望我的進程/線程的利用率......系統上CPU負載的性能計數器會因Windows上運行的其他進程而導致錯誤的數據。 – 2010-04-09 15:48:19

回答

3

可以使用的PerformanceCounter(用於系統負荷)。

或者,更好:

var p = System.Diagnostics.Process.GetCurrentProcess(); 
var span = p.TotalProcessorTime; 

您將有涉及,爲牆壁時得到的百分比。另請參閱UserProcessorTime。


編輯:

退一步講,如果你想基準難道你寧願從執行一段代碼,例如System.Diagnostics.Stopwatch類測量剛剛過去的時間?

+0

您會認爲循環執行時在處理中花費的總處理器時間會相繼增加,但有時後面的操作會顯示較早的處理器總時間更少!這是什麼原因? – 2010-04-09 18:05:04

+1

@斯科特,我不能重現。檢查基本知識,如TimeSpan .__ Total__Milliseconds(不是毫秒)。 – 2010-04-09 20:08:06

2

您可以獲得性能計數器的數據,但它肯定會更好地使用性能分析工具。 CPU利用率本身並不是一個有用的測量。你想知道這是相對於其他位代碼的最低位,這是快,但所謂的次數太多,等

3

http://msdn.microsoft.com/en-us/library/3t90y2y1(v=VS.90).aspx

好像是你在找什麼

我發現的這段代碼可能有幫助:

using System.Diagnostics; 
PerformanceCounter oPerf1 = new PerformanceCounter(); 
oPerf1.CategoryName = "Processor"; 
oPerf1.CounterName = "% Processor Time"; 
oPerf1.InstanceName = "0"; 
int I; 
for (I = 0; (I <= 100); I++) { 
    SomeListBox.Items.Add(oPerf1.NextValue); 
    Threading.Thread.Sleep(20); 
} 
+0

+1因爲沒有人使用perf mon,但它非常棒。有很多東西需要監測。 – Tony 2010-04-09 16:00:16