Неточные значения таймера счетчика производительности в Windows Performance Monitor - PullRequest
2 голосов
/ 17 марта 2010

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

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

Создание счетчиков производительности в perfmon:

var datas = new CounterCreationDataCollection();
datas.Add(new CounterCreationData 
{
    CounterName = name, 
    CounterType = PerformanceCounterType.AverageTimer32
});

datas.Add(new CounterCreationData 
{
    CounterName = namebase, 
    CounterType = PerformanceCounterType.AverageBase
});

PerformanceCounterCategory.Create("Category", "performance data",
    PerformanceCounterCategoryType.SingleInstance, datas);

Затем для записи извлекаем предварительно инициализированный счетчик из коллекции и увеличиваем его:

_counters[counter].IncrementBy(timing);
_counters[counterbase].Increment();

... где «хронометраж» - значение TimeSpan.Ticks секундомера.

Когда это выполняется, коллекция двойных значений, которые представляют собой значения миллисекунд для TimeSpan секундомера, показывают один набор значений, но то, что появляется в PerfMon, представляет собой другой набор значений.

Например ... в Списке миллисекунд записаны два значения:

23322,675, 14230,614

И то, что появляется на графике PerfMon:

15,546, 9,930

Может кто-нибудь объяснить это, пожалуйста?

1 Ответ

2 голосов
/ 18 марта 2010

Несколько догадок.

Вы используете PerformanceCounterType.AverageTimer32. Это занимает среднее время. Также возможно, что вы не сбрасываете Stopwatch при каждом вызове метода, поэтому значения, которые вы сохраняете в списке, являются общим временем выполнения каждого вызова этого метода.

Вы указали миллисекунды для списка, но отметили счетчик производительности. Тик составляет 100 наносекунд, что составляет 0,0001 миллисекунды. Я бы ожидал, что вы изменили размеры, такие как perfmon, получив 14230,614, и список, получивший 15,546, но это все равно будет на порядок меньше.

Немного ответа, но он не уместился в комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...