2013-04-24 7 views
8

.NETパフォーマンスカウンタを使用して、特定のプロセスのCPU、メモリ、ネットワークの使用状況を取得するプログラムを作成しています。特定のプロセスのネットワークパフォーマンスを監視します。

は例えば、ExplorerのためにCPUとメモリのデータを取得するために、私はこのようなパフォーマンスカウンタを作成します。

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"; 

残念ながら、私はそのためのネットワークの使用状況を取得することができますプロセスcategoryNameためのプロパティがありませんプロセス。ネットワークインターフェイスcategoryNameを使用して、特定のNICでネットワーク全体の使用状況を取得できますが、特定のプロセスにネットワークを使用することはできません。

+0

以前に似たようなものがあるようです:http://stackoverflow.com/questions/438240/monitor-a-processs-network-usage – Dilshod

+2

これはアーキテクチャ上の制限です。これらのカウンタは、ネットワークドライバスタックによって実装されます。カーネルモードで動作するので、usermodeプロセスの認識はありません。 FileSystemWatcherがファイルを変更したプロセスを教えてくれないのと同じ理由があります。 –

答えて

0

システム全体のネットワーク使用量しか取得できないとします。あなただけのマイクロソフトでは、へのアクセス権を持っているのを必要な値を得ることができ、PerformanceCountersで

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(); 
} 

:あなたはこのコードを使用することができます。

関連する問題