2013-04-24 21 views
8

Sto scrivendo un programma che utilizza il contatore delle prestazioni .NET per ottenere l'utilizzo della CPU, della memoria e della rete per un processo specifico.Monitorare le prestazioni della rete per un processo specifico

Ad esempio, per ottenere i dati della CPU e memoria per Explorer, creo contatori delle prestazioni in questo modo:

PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "Process"; 
PC.CounterName = "% Processor Time"; 
PC.InstanceName = "Explorer"; 

PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "Process"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = "Explorer"; 

Purtroppo, non v'è alcuna proprietà per il processo di categoryName che mi permette di ottenere l'utilizzo della rete per quella processi. Posso usare l'interfaccia di rete categoryName per ottenere l'utilizzo generale della rete su qualsiasi scheda di rete particolare, ma non posso isolarla per un determinato processo.

+0

sembra che ci sia qualcosa di simile chiesto prima: http: //stackoverflow.com/questions/438240/monitor-a-processs-network-usage – Dilshod

+2

Questa è una limitazione architettonica. Questi contatori sono implementati dallo stack dei driver di rete. Che gira in modalità kernel, non ha consapevolezza del processo usermode. Lo stesso tipo di motivo per cui FileSystemWatcher non può dirti quale processo ha modificato un file. –

risposta

0

Suppongo che si possa ottenere solo l'utilizzo della rete per l'intero sistema. È possibile utilizzare questo codice:

GetCounterValue(_netRecvCounters[index], "Network Interface", "Bytes Received/sec",  _instanceNames[index]): 

double GetCounterValue(PerformanceCounter pc, string categoryName, string counterName, string instanceName) 
{ 
    pc.CategoryName = categoryName; 
    pc.CounterName = counterName; 
    pc.InstanceName = instanceName; 
    return pc.NextValue(); 
} 

Con PerformanceCounters, si può ottenere solo i valori che Microsoft vuole di voi di avere accesso a.

Problemi correlati