PerformanceCounter总是0

时间:2014-10-20 08:17:35

标签: c# .net performancecounter

我尝试读取Windows性能计数器“LogicalDisk / Disk Reads / sec”和“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。

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

1 个答案:

答案 0 :(得分:3)

您一定要阅读documentation

  

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

因此:

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