我尝试读取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。
如何获得此计数器的正确值?
答案 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);
}