2012-02-13 10 views
7

Vorrei ottenere l'utilizzo della CPU per un processo specifico ..Ottenere l'utilizzo della CPU di un processo in C#

Questo codice

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

grandi opere. Il numero corrisponde al numero "Utilizzo CPU" in Windows 'Task Manager.

ma il seguente mi dà i numeri strani ...

process_cpu = new PerformanceCounter("Process", "% Processor Time", "gta_sa"); 
var process_cpu_usage = (total_cpu_usage.NextValue()/100) * process_cpu.NextValue(); 

Come potete vedere nello screenshot (invece di "7", sto ottenendo "2,9 ..").

Processes

+0

Hai provato a mettere il sonno per 1 sec tra ogni NetValue() chiama. La prima chiamata a NextValue() inizia a misurare e la chiamata successiva dà dei risultati. Quindi il trucco è creare tutti gli oggetti PerformanceCounter e chiamare immediatamente NextValue() per loro. Quindi si dorme un secondo e si chiama NextValue() per tutti di nuovo – Mohit

+0

thx, sì chiamo NetValue() ogni secondo .. –

risposta

11

In realtà, il% Tempo processore \ contatore istanza di processo \ restituisce il% di tempo che il processo monitorato utilizza in tempo% utente per un singolo processore. Quindi il limite è 100% * il numero di processori che hai.

Non sembra essere un modo semplice per calcolare il valore che visualizza taskmgr utilizzando i contatori perfmon. Vedi this link.

Ricorda anche la percentuale di utilizzo della CPU non è un valore fisso, ma un valore calcolato:

((total processor time at time T2) - (total processor time at time T1)/(T2 - T1)) 

Ciò significa che i valori dipendono sia T2 e T1, quindi ci potrebbero essere differenze tra ciò che si vede sul task manager e su ciò che si calcola, se T2 e T1 utilizzati da Task Manager sono leggermente diversi da T2 e T1 utilizzati dal programma.


Se sei interessato, posso fornirti del codice per recuperare questo valore utilizzando P/Invoke. Ma perderanno i vantaggi dei contatori delle prestazioni (come il monitoraggio dei processi remoti).

+0

Se l'utilizzo della CPU è del 17% e process_cpu_usage è 100% vuol dire che il mio processo utilizza tutti i 17 % ?? E secondo problema, a volte ottengo più del 100% da process_cpu_usage, ad esempio il 102% ... –

+0

@ MarekJavůrek Cosa restituisce 'process_cpu.NextValue()'? Quante CPU e core hai sul tuo computer? – ken2k

+0

se il carico della mia CPU è circa del 15% e il mio processo utilizza tutto il 15%, process_cpu.NextValue() restituisce il numero come 99 o 100 .. tahts perché faccio questo: var process_cpu_usage = (total_cpu_usage.NextValue()/100) * process_cpu .NextValue(); ... la mia CPU è i5-2430M –

6

Dividendo dal processore/core count è quello che sembrava produrre risultati abbastanza precisi confrontando con Task Manager.

Per risparmiare tempo la gente:

// This will return the process usage as a percent of total processor utilisation. 
var processUsage = process_cpu_usage/nextValue()/Environment.ProcessorCount; 
Problemi correlati