【发布时间】:2014-12-08 22:44:11
【问题描述】:
我使用这段代码来检索我要监控的机器上的可用性能计数器:
var allCounters = new List<PerformanceCounter>();
foreach (var category in PerformanceCounterCategory.GetCategories("machine-name"))
{
var names = category.GetInstanceNames();
if (names.Length > 0)
{
foreach (var name in names)
{
allCounters.AddRange(category.GetCounters(name));
}
}
else
{
allCounters.AddRange(category.GetCounters());
}
}
我找到了一个我想监控的计数器:Database Cache % Hit。它没有任何实例名称,所以我就是这样理解的:
new PerformanceCounter("Database", "Database Cache % Hit", null, "machine-name"); //null or "" for the third argument
这一直有效,直到我在其上调用 NextValue 方法,这会引发 InvalidOperationException :
Counter is not single instance, an instance name needs to be specified.
我尝试输入要监视的 SQL Server 数据库名称的名称,但它也不起作用(而是在实例化期间失败)。
如何在我的 C# 应用程序中使用此性能计数器?
【问题讨论】:
-
在 run 中键入
perfmon.exe并查看您的Database --> Database Cache % Hit计数器下有多少实例。显然不止一个。 -
在我的电脑上,是的。在远程机器上,不:/ perfmon 中没有显示实例名称。也许计数器本身坏了,因为 perfoman 甚至无法监控它。我应该补充一点,远程机器是托管在 HyperV 上的 VM,如果这有任何改变的话。
标签: c# performancecounter