2011-01-13 9 views
51

W jaki sposób można uzyskać CPU i wykorzystania pamięci określonego procesu przy użyciu klasy .NET PerformanceCounter? A także jaka jest różnica międzyJaki jest poprawny licznik wydajności, aby uzyskać procesor i użycie pamięci procesu?

i Process\% Processor Time?

Jestem trochę zdezorientowany między tymi dwoma.

+3

Nie ma jedna właściwa droga do pomiaru zużycia pamięci. Pamięć może być używana na wiele różnych sposobów. Na przykład, czy liczę pamięć zamienioną na dysk lub pamięć, która jest po prostu zarezerwowana/zatwierdzona, ale jeszcze nie zapisana, ... – CodesInChaos

Odpowiedz

91

Od this postu:

dostać całą PC CPU i pamięć Zastosowanie:

using System.Diagnostics; 

Następnie zadeklarować globalnie:

private PerformanceCounter theCPUCounter = 
    new PerformanceCounter("Processor", "% Processor Time", "_Total"); 

Następnie, aby uzyskać czas procesora, po prostu zadzwoń pod numer NextValue():

this.theCPUCounter.NextValue(); 

To będzie Ci użycie procesora

chodzi o wykorzystanie pamięci, to samo dotyczy wierzę:

private PerformanceCounter theMemCounter = 
    new PerformanceCounter("Memory", "Available MBytes"); 

Następnie, aby uzyskać zużycie pamięci, wystarczy wywołać metodę NextValue():

this.theMemCounter.NextValue(); 

Dla określonego procesu procesora i użycia pamięci:

private PerformanceCounter theCPUCounter = 
    new PerformanceCounter("Process", "% Processor Time",    
    Process.GetCurrentProcess().ProcessName); 

gdzie Process.GetCurrentProcess().ProcessName jest nazwą procesu, o którym chcesz uzyskać informacje.

private PerformanceCounter theMemCounter = 
    new PerformanceCounter("Process", "Working Set", 
    Process.GetCurrentProcess().ProcessName); 

gdzie Process.GetCurrentProcess().ProcessName to nazwa proces chcesz uzyskać informacje.

Zauważ, że Zestaw roboczy może nie być wystarczająca sama w sobie do ustalenia ślad proces pamięci - patrz What is private bytes, virtual bytes, working set?

Aby pobrać wszystkie kategorie zobacz Walkthrough: Retrieving Categories and Counters

Różnica między Processor\% Processor Time i Process\% Processor Time jest Processor pochodzi z samego komputera, a Process dotyczy pojedynczego procesu. Tak więc czas procesora procesora będzie wykorzystany na PC. Czas procesora procesu to określone wykorzystanie procesów. Dla pełnego opisu nazw kategorii: Performance Monitor Counters

Alternatywą pomocą licznika wydajności

Używaj System.Diagnostics.Process.TotalProcessorTime i System.Diagnostics.ProcessThread.TotalProcessorTime Właściwości, aby obliczyć zużycie procesora jak to article opisuje.

+1

Ale czy poda bieżący proces CPU/Mem, z którego wywołana zostanie ta funkcja? –

+0

Wykorzystanie pamięci nie jest dostępną pamięcią. Jak korzystać z megabajtów, niedostępne? –

+1

Jeśli utworzę parametr CPUCounter, jak powyżej, otrzymam wyjątek InvalidOPerationException: "Nie można załadować danych nazwy licznika, ponieważ niepoprawny indeks" "został odczytany z rejestru." – Ted

3

Pelo Hyper-V:

private PerformanceCounter theMemCounter = new PerformanceCounter(
    "Hyper-v Dynamic Memory VM", 
    "Physical Memory", 
    Process.GetCurrentProcess().ProcessName); 
Powiązane problemy