gpt4 book ai didi

c# - Windows 性能监视器中的性能计数器计时器值不准确

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:30 28 4
gpt4 key购买 nike

我在应用程序中实现检测时遇到了一个问题,即 Windows 性能监视器中显示的 PerformanceCounter 值与记录的值不一致。

我使用秒表记录方法执行的持续时间,然后我首先将总毫秒数记录为 double ,然后我将秒表的 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 值。

运行时,double 的集合(秒表的 TimeSpan 的毫秒值)显示一组值,但 PerfMon 中显示的是一组不同的值。

比如……List of milliseconds中记录的两个值是:

23322.675, 14230.614

PerfMon 图中出现的是:

15.546, 9.930

有人可以解释一下吗?

最佳答案

一些猜测。

您正在使用 PerformanceCounterType.AverageTimer32。这是平均时间。也有可能您没有在每次方法调用时重置 Stopwatch,因此您存储在列表中的值是到目前为止每次调用该方法的总运行时间。

您说的是列表的毫秒数,但性能计数器的滴答声。一个刻度为 100 纳秒,即 0.0001 毫秒。我本以为你必须颠倒大小,例如 perfmon 得到 14230.614,list 得到 15.546,但这仍然会相差一个数量级。

答案不多,但不适合发表评论。

关于c# - Windows 性能监视器中的性能计数器计时器值不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2459592/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com