从C#:实例读取性能计数器在指定类别中不存在

从C#:实例读取性能计数器在指定类别中不存在,c#,.net,performancecounter,C#,.net,Performancecounter,我正在尝试从正在运行的.NET 4应用程序和另一个.NET 4应用程序读取大量性能计数器 一些计数器,如Process\%Processor Time和Process\Private Bytes工作正常。但是,当我尝试从.NET类别之一(如.NET CLR Memory\#Gen 0 Collections)读取性能计数器时,会出现以下异常: Instance 'MyApplication' does not exist in the specified Category 当我打电话时: ne

我正在尝试从正在运行的.NET 4应用程序和另一个.NET 4应用程序读取大量性能计数器

一些计数器,如
Process\%Processor Time
Process\Private Bytes
工作正常。但是,当我尝试从.NET类别之一(如
.NET CLR Memory\#Gen 0 Collections
)读取性能计数器时,会出现以下异常:

Instance 'MyApplication' does not exist in the specified Category
当我打电话时:

new PerformanceCounterCategory(".NET CLR Memory").GetInstanceNames()
它返回一组非常小的实例,而MyApplication确实不在列表中。但是,当我在
perfmon
中查看性能计数器时,我在那里看到的同一类别/计数器的实例列表要长得多,并且确实包括MyApplication

有人知道为什么.NET计数器对我的应用程序不可见吗


(注意:受监控的应用程序是由监控应用程序启动的,因此它们肯定在同一个用户帐户中运行。我还尝试以管理员身份启动我的监控应用程序,并将我的帐户添加到Performance Monitor Users组中,但没有效果。)

项目有两种设置可能与您的问题相关

首先,项目+属性、构建选项卡、平台目标。在具有64位操作系统的计算机上,将此设置为x86将获得不包含64位进程的实例名称列表。Perfmon.exe是一个64位进程,它显示所有实例,包括32位和64位应用程序。通过将平台目标设置为AnyCPU获得相同的行为,这不再是VisualStudio2010的默认设置。如果看到,请取消勾选“首选32位”

第二个是项目+属性,调试选项卡,“启用VisualStudio托管进程”选项。选中时,您正在调试名为yourapp.vshost.exe而不是yourapp.exe的进程。这也会影响实例名称,它将是yourapp.vshost。在您的具体案例中,不太可能是问题所在


如果这个猜测不准确,一定要用这些基本信息更新你的问题。

不是问题;仅1个实例,无论是否使用XML配置,它都不起作用,而且在任何情况下,计数器在perfmon中都能正常工作。我只有在运行实际生成的可执行文件时才能得到
“ConsoleApplication2”
。当我从VisualStudio运行程序时,我不明白。我得到的是
ConsoleApplication2.vshost
。这是由于平台目标。从x86更改为“任何CPU”都有效。非常感谢,我从来没有想到这一点!还要确保没有设置“项目属性->构建选项卡->首选32位”。我也有同样的问题。我尝试了任何CPU、x86和x64(首选未设置32位)。在每种情况下都有相同的错误。还有其他人有这个问题吗?