我正在尝试从另一个.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计数器?
(注意:监控应用程序启动,因此它们肯定在同一个用户帐户中运行。我还尝试以管理员身份启动监控应用程序并将我的帐户添加到性能监视器用户组,无效。)
答案 0 :(得分:18)
项目有两个与您的问题相关的设置。
首先,Project + Properties,Build选项卡,Platform目标。在具有64位操作系统的计算机上,将其设置为x86将为您提供 not 包含64位进程的实例名称列表。 Perfmon.exe是一个64位进程,它显示所有实例,包括32位和64位应用程序。通过将Platform目标设置为AnyCPU来获得相同的行为,这不再是Visual Studio 2010上的默认目标。如果您看到它,请取消“首选32位”。
其次是Project + Properties,Debug选项卡,“启用Visual Studio托管过程”选项。选中时,您正在调试名为yourapp.vshost.exe而不是yourapp.exe的进程。这也会影响实例名称,它将是yourapp.vshost。在您的具体情况下不太可能出现问题。
如果此猜测不准确,请务必使用此基本信息更新您的问题。