从C#读取性能计数器:指定类别中不存在实例
我正在尝试从另一个.NET 4应用程序中运行的.NET 4应用程序中读取许多性能计数器。
某些计数器,例如Process\% Processor Time
和Process\Private Bytes
工作正常。 但是,只要我尝试从其中一个.NET类别(例如.NET CLR Memory\# Gen 0 Collections
读取性能计数器,就会出现以下exception:
Instance 'MyApplication' does not exist in the specified Category
我打电话的时候:
new PerformanceCounterCategory(".NET CLR Memory").GetInstanceNames()
它返回一组非常小的实例,MyApplication确实不在列表中。 但是,当我在perfmon
查看我的性能计数器时,我在同一类别/计数器中看到的实例列表要长得多,并且包括MyApplication。
有谁知道为什么我的应用程序看不到.NET计数器?
(注意:受监视的应用程序由监视应用程序启动 ,因此它们肯定在同一用户帐户中运行。我还尝试以管理员身份启动我的监视应用程序并将我的帐户添加到Performance Monitor Users组,但不起作用。)
项目有两个与您的问题相关的设置。
首先,Project + Properties,Build选项卡,Platform目标。 在具有64位操作系统的计算机上,将其设置为x86将获得不包含64位进程的实例名称列表。 Perfmon.exe是一个64位进程,它显示所有实例,包括32位和64位应用程序。 通过将Platform目标设置为AnyCPU来获得相同的行为,这不再是Visual Studio 2010上的默认设置。如果您看到它,请取消“首选32位”。
其次是Project + Properties,Debug选项卡,“启用Visual Studio托管过程”选项。 选中后,您正在调试名为yourapp.vshost.exe而不是yourapp.exe的进程。 这也会影响实例名称,它将是yourapp.vshost。 在您的具体情况下不太可能出现问题。
如果此猜测不准确,请务必使用此基本信息更新您的问题。