C# PerformanceCounter Requests/Sec 未更新

C# PerformanceCounter Requests/Sec not updated

我正在制作一个程序,我需要从性能计数器中获取一些值。

到目前为止一切正常。但是当我试图获取特定 IIS 站点的 "Requests/Sec" 计数器时,我没有获得任何值,比如它根本没有更新。 但是如果我在我的 windows 计算机上检查 "Performance Monitor",我可以看到相同的计数器工作。

这个程序有管理员权限。

获取此计数器的代码片段如下所示。

 public static int GetRequest()
    {

        var cat = PerformanceCounterCategory.GetCategories().FirstOrDefault(s => s.CategoryName.Contains("ASP.NET Apps v4.0.30319"));
        var catinstances = cat.GetInstanceNames().First(s => s.Contains("_lm_w3svc_3_root").ToUpper()));
        PerformanceCounter cpuCounter = new PerformanceCounter("ASP.NET Apps v4.0.30319", "Requests/Sec", catinstances, true);
        return unchecked((int)cpuCounter.NextValue());
    }

感谢您的宝贵时间。

您需要保留该性能计数器的一个实例,而不是在每次调用时重新实例化它。

以下代码会将计数器保存在静态成员中,并在下次调用您的方法时重新使用该实例:

static PerformanceCounter _requestCounter; // keep instance around
static PerformanceCounter cpuCounter  // property with lazy init
{
   get 
   {
      // initialize if we haven't done so.
      if (_requestCounter == null) {
        var cat = PerformanceCounterCategory.GetCategories().FirstOrDefault(s => s.CategoryName.Contains("ASP.NET Apps v4.0.30319"));
        var catinstances = cat.GetInstanceNames().First(s => s.ToUpper().Contains("_WEB"));
        _requestCounter = new PerformanceCounter("ASP.NET Apps v4.0.30319", "Requests/Sec", catinstances, true);

      }
      return _requestCounter;
   }
}

public static int GetRequest()
{  
    return unchecked((int)cpuCounter.NextValue());
}