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());
}
我正在制作一个程序,我需要从性能计数器中获取一些值。
到目前为止一切正常。但是当我试图获取特定 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());
}