如何创建和使用 System.Diagnostics.PerformanceData.CounterSet?

How do I create and use System.Diagnostics.PerformanceData.CounterSet?

我在使用 PerformanceCounterCategory.Create 方法创建的 .NET 应用程序中获得了性能计数器,并传入 CounterCreationDataCollection.

我刚刚玩过 Powershell 的 Get-Counter 命令,它带有一个 -ListSet 参数。如果你执行:

Get-Counter -ListSet * | select countersetname | sort countersetname

您将看到一个与您在 perfmon.exe 的可用计数器类别列表中看到的非常相似的列表。

问题是上面的命令没有返回我的类别。

显然"counter category"和"counter set"是不同的概念。我能在 .NET 中找到的最接近的是 System.Diagnostics.PerformanceData.CounterSet。问题是没有关于如何创建这些 "counter sets".

的好的文档或示例

CounterSet是我需要的东西吗?我该如何使用它?

原来这是我的 Powershell 会话的(未诊断的)异常。当我在我的 Powershell ISE(非管理员)中 运行 时,我收到以下错误:

> Get-Counter -ListSet MyCategory
Get-Counter : Cannot find any performance counter sets on the localhost computer that match the following: MyCategory.
At line:1 char:1
+ Get-Counter -ListSet MyCategory
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (:) [Get-Counter], Exception
    + FullyQualifiedErrorId : NoMatchingCounterSetsFound,Microsoft.PowerShell.Commands.GetCounterCommand

奇怪地尝试按名称直接检索计数器会出现此错误:

>Get-Counter -Counter "\MyCategory\MyCounter"
Get-Counter : Internal performance counter API call failed. Error: c0000bb8.
At line:1 char:1
+ Get-Counter -Counter "\MyCategory\MyCounter"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidResult: (:) [Get-Counter], Exception
    + FullyQualifiedErrorId : CounterApiError,Microsoft.PowerShell.Commands.GetCounterCommand

但是...当我 运行 在新的 Powershell 会话中(即使是非管理员)它工作得很好。

所以在回答我的问题时:PerformanceCounterCategory 和 "counter set" 似乎是同一回事。