#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. Я прав здесь? Пожалуйста, дайте мне знать.