我想阅读NextValue()"ASP.NET"性能计数器类别的性能.但是,此类别的计数器始终显示为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
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?许可或某种防火墙问题?
解决方案是在对 NextValue 的调用之间休眠 1 秒。
在VB中:
Dim cpu As New PerformanceCounter("Processor", "% Processor Time", "_Total", "servername")
cpu.NextValue()
System.Threading.Thread.Sleep(1000)
MyValue = cpu.NextValue()
Run Code Online (Sandbox Code Playgroud)
很难知道它是否仍然返回正确的数字,但它与 perfmon 显示的非常接近(在 1 点以内)。我也尝试了 2 秒,它似乎更接近 perfmon 显示的内容。
请记住,根据文档,您需要在调用 NextValue() 之间延迟“大约 1 秒”!
...并链接到https://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.nextvalue.aspx,其中指出:
如果计数器的计算值取决于两次计数器读取,则第一次读取操作将返回 0.0。重置性能计数器属性以指定不同的计数器相当于创建一个新的性能计数器,并且使用新属性的第一次读取操作将返回 0.0。建议调用 NextValue 方法之间的延迟时间为一秒,以允许计数器执行下一次增量读取。