2013-02-10 36 views
1

我有一個進程ID,我需要獲得CPU使用率。獲得進程的CPU使用量進程ID

例如,下面是一個簡單的函數返回AppName的CPU使用情況:

Private Function Get_CPU_Usage(AppName as String) 
    Dim AppCPU As New PerformanceCounter("Process", "% Processor Time", AppName, True) 
    Return AppCPU.NextValue 
End Function 

這可能是錯誤的,但它只是一個例子。

我需要做這樣的事情:

Private Function Get_CPU_Usage(ProcessID as Integer) 
    Dim AppCPU As New PerformanceCounter("Process", "% Processor Time", ProcessID, True) 
    Return AppCPU.NextValue 
End Function 

注意VS的ProcessID程序的名字。我有多個進程使用相同的名稱運行;每個應用程序的PID都存儲在我的程序中。我知道我可以遍歷...

PerformanceCounter("Process", "ID Process", AppName, True) 

查找過程的名稱,如應用程序,應用程序#1,#應用程序2,但似乎效率不高和馬虎。

這裏推薦的程序是什麼?

+1

的可能重複(HTTP ://stackoverflow.com/questions/9115436/performance-counter-by-process-id-instead-of-name) – 2013-02-11 01:10:10

+0

謝謝!我將C#表單轉換爲VB.net併發布了答案。 – Brady 2013-02-18 07:09:23

回答

1

由於Hans Passant用於鏈接到在C#形式的答案,這裏是VB.net函數從Performance Counter by Process I instead of name轉換:[?性能由進程ID,而不是名稱計數器]

Public Shared Function GetProcessInstanceName(ByVal PID As Integer) As String 
    Dim cat As New PerformanceCounterCategory("Process") 
    Dim instances() = cat.GetInstanceNames() 
    For Each instance In instances 
     Using cnt As PerformanceCounter = New PerformanceCounter("Process", "ID Process", instance, True) 
      Dim val As Integer = CType(cnt.RawValue, Int32) 
      If val = PID Then 
       Return instance 
      End If 
     End Using 
    Next 
End Function