PerformanceCounter always 0

本文关键字:always PerformanceCounter | 更新日期: 2023-09-27 18:27:03

我尝试读取windows性能计数器"LogicalDisk/Disk Reads/sec"answers"Cluster CSV File System/IO Reads/sec"。我是这么做的:

string category = "Cluster CSV File System";
string counter = "IO Reads/sec";
string instance = "Volume1";
for (int i = 0; i < 60; i++)
{
    using (PerformanceCounter perfCounter = new PerformanceCounter(category, counter, instance))
    {
        float value = perfCounter.NextValue();
        Console.WriteLine(i + " - {0}({1}): {2}", category, counter, value);
    }
    Thread.Sleep(1000);
}

但是NextValue()总是返回0。尽管性能监视器图中的值不是0。

如何获取此计数器的正确值?

PerformanceCounter always 0

您绝对应该阅读文档

如果计数器的计算值取决于两次计数器读取,则第一次读取操作返回0.0。重置性能计数器属性以指定不同的计数器相当于创建一个新的性能计数器,使用新属性的第一次读取操作返回0.0。建议调用NextValue方法之间的延迟时间为1秒,以允许计数器执行下一次增量读取。

因此:

using(...)
{
    perfCounter.NextValue(); // discard 0
    Thread.Sleep(1000);
    float value = perfCounter.NextValue();
    Console.WriteLine(i + " - {0}({1}): {2}", category, counter, value);
}