【问题标题】:ASP.NET Performance Counter always return 0ASP.NET 性能计数器始终返回 0
【发布时间】:2013-10-23 13:46:34
【问题描述】:

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

有什么想法吗?权限或某种防火墙问题?

【问题讨论】:

  • PerformanceCounter:“要获取需要初始值或先前值来执行必要计算的计数器的性能数据,请调用 NextValue 方法两次,并根据应用程序的需要使用返回的信息。” - 也许这样就行了。
  • 很遗憾没有。该值保持为 0。

标签: c# asp.net vb.net


【解决方案1】:

解决方案是在调用 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

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

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

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

【讨论】:

    【解决方案2】:

    如果.NextValue() 之间的睡眠呼叫不起作用,您必须将您的用户置于“Performance Monitor Users”组权限中。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      相关资源
      最近更新 更多