2012-03-05 183 views
1

为什么下面的代码引发错误Instance 'taskmgr' does not exist in the specified Category.时,我没有通过PARAMS在构造函数为什么在PerformanceCounter对象上调用NextValue()会抛出错误?

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

但是,当我做同样通过传递PARAMS在构造函数不会引发错误。

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

更新: 我试着在每一个进程的名称,不仅是“taskmgr”,结果是一样的!

什么问题?

+0

实际上它给了同样的错误了我在这两种情况下 – ionden 2012-03-05 16:10:59

+0

你确定taskmgr实际上运行时,你执行这两个代码块? – ken2k 2012-03-05 16:13:24

+0

是的。我已经仔细检查过了。它发生在我把每个进程名称 – theateist 2012-03-05 16:17:15

回答

1

有可用于Processor类别没有taskmgr实例,因为Processor是关于你的CPU ...

你可能是指Process,预期其工作原理:

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

你是对的!这解决了这个问题。但是,对于'CategoryName =“Processor”'为什么它只在我通过参数传递时才起作用? – theateist 2012-03-05 16:43:43

+0

@theateist你能提供一个可重复的例子吗?我刚刚以0为例来测试处理器(即您的机器的第一个核心),它适用于我的两种情况。 – ken2k 2012-03-05 16:46:49

0

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

如果您为CategoryName提供"Process"它允许查看过程。

相关问题