У нас есть веб-приложение, в котором мы используем некоторые счетчики производительности. Для случаев, когда одновременно запущено более одного приложения, у нас есть код для определения имени текущего экземпляра:
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. И как мы обнаружили, они имеют различное соответствие между идентификатором процесса и именем экземпляра: alt text http://img26.imageshack.us/img26/9876/perfmon.png
Таким образом, идентификаторы процессов различаются для одного имени экземпляра для .Net Clr Memory и категории Process.
Это ошибка .Net?
Какой счетчик (идентификатор процесса из памяти .Net Clr или идентификатор процесса из категории процесса) следует использовать для получения правильного имени экземпляра?