2013-02-10 3 views
1

У меня есть идентификатор процесса, и мне нужно получить использование ЦП a.k.a % Время процессора процесса.Получить использование ЦП для процесса по идентификатору процесса

Например, вот простая функция для возврата использования ЦП AppName:

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 

Примечание ProcessId против AppName. У меня несколько процессов, работающих под тем же именем; каждый ПИД-код приложения сохраняется в моей программе. Я знаю, что могу перебрать ...

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

найти имя процесса, как приложение, приложение № 1, приложение № 2, но это, кажется неэффективным и неаккуратно.

Рекомендуемая процедура здесь?

+1

возможно дубликат (HTTP : //stackoverflow.com/questions/9115436/performance-counter-by-process-id-instead-of-name) –

+0

Спасибо! Я преобразовал форму C# в VB.net и отправил ответ. – Brady

ответ

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 
Смежные вопросы