2014-10-20 88 views
0

我尝试读取Windows性能计数器“LogicalDisk/Disk Reads/sec”和“Cluster CSV File System/IO Reads/sec”。 我愿意这样做:PerformaceCounter始终为0

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的性能监视器图表。 我怎样才能得到这个柜台的正确值?

+0

是什么perfCounter.RawValue返回? – Oliver 2014-10-20 08:23:06

+0

似乎有一些值得NextValue的值(参考注释) http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.nextvalue(v=vs.90 )的.aspx – Oliver 2014-10-20 08:24:58

回答

3

你一定要读documentation

如果计数器的计算值取决于两个计数器读,第一次读操作返回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); 
}