2011-04-20 60 views
0

我已經研究了很多,但我可以找到的是如何獲得單個處理時間。如何在C#中獲得總處理器時間?

Process p = exampleProcess 
return p.TotalProcessorTime 

如何獲得總處理器時間?如果我執行以下操作,我是否可以獲得該進程的%CPU使用率:

return p/totalProcessorTime 

+1

你能解釋一下你所說的「總的處理器時間」,那麼是什麼意思? – 2011-04-20 23:24:58

回答

1

您可以使用PerformanceCounter

PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", p.ProcessName); 
double currentCpuPercent = cpuCounter.NextValue(); 
0

您希望總處理器時間(不限於單個進程)正確嗎?這是否意味着您需要系統上所有進程的處理器時間?這不是與系統啓動以來延長的掛牆時間相同嗎?如果是這樣,GetTickCount64將做的伎倆。

+0

是不是單獨計算每個處理器內核的CPU時間,即如果一個進程完全佔用兩個CPU內核,那麼總CPU時間將是實際所用時間的兩倍? – 2011-04-20 23:39:35

+0

好點。然後它會是GetTickCount64 * GetProcessorCount。 http://msdn.microsoft.com/en-us/library/dd470844.aspx – 2011-04-21 13:35:18

2

不,你不能用一個時間跨度劃分的過程。 TotalProcessorTime是衡量執行代碼的實際時間。這是一個絕對數字。如果你想要一個相對數字,那麼你需要測量過程已經運行了多久。從ExitTime減去StartTime。就像這樣:

 Process prc = /* something */ 
     var wallTime = DateTime.Now - prc.StartTime; 
     if (prc.HasExited) wallTime = prc.ExitTime - prc.StartTime; 
     var procTime = prc.TotalProcessorTime; 
     var cpuUsage = 100 * procTime.TotalMilliseconds/wallTime.TotalMilliseconds;