ASP.NET性能计数器始终返回0

时间:2013-10-23 13:46:34

标签: c# asp.net vb.net

我想阅读“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

有什么想法吗?许可或某种防火墙问题?

2 个答案:

答案 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所展示的。

来自http://blogs.msdn.com/b/dotnetinterop/archive/2007/02/02/system-diagnostics-performancecounter-and-processor-time-on-multi-core-or-multi-cpu.aspx

  

请记住,您需要延迟"大约1秒钟"在调用NextValue()之间,根据文档!

...以及指向https://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.nextvalue.aspx的链接,其中说明:

  

如果计数器的计算值取决于两个计数器读数,则第一个读取操作返回0.0。重置性能计数器属性以指定其他计数器等效于创建新的性能计数器,使用新属性的第一个读取操作返回0.0。调用NextValue方法之间建议的延迟时间是一秒,以允许计数器执行下一次增量读取。

答案 1 :(得分:0)

如果.NextValue()之间的睡眠呼叫不起作用,则必须将您的用户置于“性能监视器用户”组权限中。

如果是服务,则将用户“本地服务”放入“性能监视器用户”组。

How to add user to Performance Monitor Users group