Я реализую инструментарий в приложении и столкнулся с проблемой, когда значение, отображаемое в системном мониторе 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
Может кто-нибудь объяснить это, пожалуйста?