我想阅读“ASP.NET”性能计数器类别的性能NextValue()
。但是,此类别的计数器始终显示为0,而其他计数器按预期工作。
远程计算机上的perfmon.exe中的“ASP.NET”计数器工作正常。
我本地计算机上针对远程计算机的perfmon.exe中的“ASP.NET”计数器也显示为0.
var pc = new PerformanceCounter("ASP.NET", "Requests Current", "", "myRemoteMachine");
pc.NextValue(); // returns always 0
pc.NextValue(); // returns always 0
有什么想法吗?许可或某种防火墙问题?
答案 0 :(得分:2)
解决方法是在调用NextValue之间休息1秒。
在VB中:
Dim cpu As New PerformanceCounter("Processor", "% Processor Time", "_Total", "servername")
cpu.NextValue()
System.Threading.Thread.Sleep(1000)
MyValue = cpu.NextValue()
很难知道它是否仍然返回正确的数字,但它与perfmon显示的非常接近(在1点内)。我也尝试了2秒钟,它似乎更接近于perfmon所展示的。
请记住,您需要延迟"大约1秒钟"在调用NextValue()之间,根据文档!
...以及指向https://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.nextvalue.aspx的链接,其中说明:
如果计数器的计算值取决于两个计数器读数,则第一个读取操作返回0.0。重置性能计数器属性以指定其他计数器等效于创建新的性能计数器,使用新属性的第一个读取操作返回0.0。调用NextValue方法之间建议的延迟时间是一秒,以允许计数器执行下一次增量读取。
答案 1 :(得分:0)
如果.NextValue()
之间的睡眠呼叫不起作用,则必须将您的用户置于“性能监视器用户”组权限中。
如果是服务,则将用户“本地服务”放入“性能监视器用户”组。