いくつかのパフォーマンス カウンターを使用している Web アプリケーションがあります。複数のアプリケーションが同時に実行されている場合のために、現在のインスタンス名を決定するためのコードがあります。
int processId = GetProcessID();
PerformanceCounterCategory processCategory = new PerformanceCounterCategory("Process");
string[] runnedInstances = processCategory.GetInstanceNames();
foreach (string runnedInstance in runnedInstances){
using (System.Diagnostics.PerformanceCounter performanceCounter =
new System.Diagnostics.PerformanceCounter("Process", "ID Process", runnedInstance, true)){
if ((int)performanceCounter.RawValue == processId){
return runnedInstance;
}
}
}
このコードは問題なく動作しますが、しばらく前に、.Net CLR カテゴリの 2 つのカウンターのサポートを追加しました。そして、プロセス ID とインスタンス名の一致が異なることを発見しました: alt テキスト http://img26.imageshack.us/img26/9876/perfmon.png
したがって、プロセス ID は、.Net Clr メモリとプロセス カテゴリの 1 つのインスタンス名に対して異なります。
.Netのバグですか?
正しいインスタンス名を取得するには、どのカウンター (.Net Clr メモリからのプロセス ID またはプロセス カテゴリからの ID プロセス) を使用する必要がありますか?