我正在应用程序中实现检测,遇到了一个问题,即从 PerformanceCounter 在 Windows 性能监视器中显示的值与记录的值不一致。
我使用秒表来记录方法执行的持续时间,然后首先将总毫秒记录为双精度,然后将秒表的 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
有人可以解释一下吗?