Чтение счетчиков Perfmon для категории «Исключения .NET CLR»

#c# #.net #perfmon

#c# #.net #perfmon

Вопрос:

Я пытаюсь прочитать счетчики perfmon для категории «Исключения .NET CLR». Ниже приведен код для того же. То, что я вижу, выглядит так, как будто разные данные отображаются в счетчике Perfmon Windows и консольном приложении, которое я создал.

 PerformanceCounterCategory netClrExceptionCat = new PerformanceCounterCategory(".NET CLR Exceptions");
foreach (PerformanceCounter counter in netClrExceptionCat.GetCounters("_Global_"))
{
    Console.WriteLine(string.Format("  Counter: {0} : Value : {1}", counter.CounterName, counter.RawValue));
}
  

введите описание изображения здесь

Я был бы признателен, если кто-нибудь, пожалуйста, укажет мне правильное направление на случай, если я делаю здесь что-то не так.

Ответ №1:

Обратите внимание, что расхождение относится к производным значениям «в секунду». Такого рода счетчики несколько противоречат интуиции. ОС не сохраняет стандартное мгновенное значение, которое вы можете получить. Отслеживание прошедшего времени и выполнение деления выполняется в приложении, использующем счетчик. Например, если вы запрашиваете счетчик с задержкой в 5 секунд между вызовами, ваше приложение делит разницу в исходном значении счетчика на 5. Теперь ваше приложение не будет использовать точно такую же задержку или даже, скорее всего, не будет захватывать какие-либо выборки одновременно. Следовательно, ваши значения будут где угодно, от незначительных до значительно отличающихся.

Комментарии:

1. Спасибо за ответ!! Ценю, что вы нашли время, чтобы кратко ответить на этот вопрос. Итак, если я правильно понимаю, мое консольное приложение (которое могло бы иметь выделенный поток) продолжает считывать данные с регулярными интервалами (1 сек / 5 сек) и продолжает передавать их на консоль, которая может, по крайней мере, немного приблизиться к значению, показанному в perfmon. Я прав здесь? Пожалуйста, дайте мне знать.