【问题标题】:PerformanceCounter always 0性能计数器始终为 0
【发布时间】:2014-10-20 08:17:35
【问题描述】:

我尝试读取 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。

我怎样才能得到这个计数器的正确值?

【问题讨论】:

标签: c# .net performancecounter


【解决方案1】:

您绝对应该阅读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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多