为什么在PerformanceCounter对象上调用NextValue()会抛出错误?

时间:2012-03-05 16:06:44

标签: c# system.diagnostics perfmon

为什么以下代码在我未在ctor中传递params时抛出错误Instance 'taskmgr' does not exist in the specified Category.

var cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";            
cpuCounter.InstanceName = "taskmgr";
cpuCounter.NextValue();

但是,当我通过在ctor中传递params时也没有出现错误。

var cpuCounter = new PerformanceCounter(
    "Processor",
    "% Processor Time",
    "taskmgr");
cpuCounter.NextValue();

更新: 我已尝试过每个进程名称,不仅是“taskmgr”,结果也一样!

有什么问题?

2 个答案:

答案 0 :(得分:1)

taskmgr类没有Processor个实例可用,因为Processor与您的CPU有关...

你可能意味着Process,它按预期工作:

var cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Process";
cpuCounter.CounterName = "% Processor Time";            
cpuCounter.InstanceName = "taskmgr";
cpuCounter.NextValue();

答案 1 :(得分:0)

您确定为CategoryName / InstanceName提供了正确的值吗?从documentation for InstanceName看起来,实例名称应该与通过性能监视器MMC管理单元提供的值匹配,该管理单元仅为我的计算机上的处理器提供_Total和整数索引,至少在提供时"Processor"

如果您为"Process"提供CategoryName,则可以查看流程。