如何:创建自定义性能计数器

更新:2007 年 11 月

创建新计数器时,应首先创建类别,然后指定要在其中包含的一个或多个计数器。可以通过以下方式之一来进行:

创建计数器和类别时,应考虑两个特殊的问题。首先,不能在远程计算机上创建自定义的类别和计数器。其次,您与自定义计数器和类别的交互仅限于只读模式,除非您显式地另行指定。在只读模式下,不能对其进行增减或在其中设置原始值或其他值。您可以使用 ReadOnly 属性将自定义计数器设置为可写模式。

一定要注意创建计数器与创建 PerformanceCounter 组件的实例之间的区别。创建计数器是在 Windows 操作系统中创建一个新的类别及其相关计数器,而不是在您的项目或应用程序中创建组件。在创建 PerformanceCounter 组件的实例时,将在 Visual Studio 项目内部创建一个引用外部计数器的组件。

说明:

有些安全限制会影响您使用性能计数器的能力。有关更多信息,请参见 监视性能阈值的介绍

安全说明:

请注意,在创建性能计数器时,该资源可能已经存在。另一进程(可能是恶意进程)可能已创建了资源,并拥有对该资源的访问权。将数据放入性能计数器后,其他进程就可使用这些数据了。

说明:

Microsoft Windows NT 4.0 版不完全支持 PerformanceCounter 类。您可从系统计数器中读取,但不能创建、写入或删除自定义计数器。

说明:

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您使用的 Visual Studio 版本及设置。有关更多信息,请参见Visual Studio 设置

在设计时创建新类别和自定义性能计数器

  1. 打开“服务器资源管理器”,展开要查看的服务器的节点。

    说明:

    如果所需的服务器没有列出,则必须添加该服务器。有关更多信息,请参见如何:访问和初始化服务器资源管理器/数据库资源管理器

  2. 右击“性能计数器”节点并选择“创建新类别”。

    将出现“性能计数器生成器”对话框。

    说明:

    若要访问性能计数器,您必须是具有对性能计数器的访问权的安全组(例如,“Performance Monitor Users”组)的成员。此外,当您试图执行需要提升权限的操作时,可能会收到 Windows Vista 上的相应提示,即使在管理权限下运行也是如此。有关更多信息,请参见 Windows Vista 和 Visual Studio

  3. 为要创建的类别输入名称和说明。

    说明:

    如果指定现有类别的名称,将引发一个错误。若要覆盖现有的计数器类别,必须先用 Delete 方法删除该类别,然后添加新类别。

  4. 在“计数器列表生成器”框架中,执行以下操作:

    1. 单击“新建”按钮。

    2. 在“计数器”框架中,指定要在该类别中创建的计数器的名称。

    3. 从“类型”下拉列表中选择一个类型。

    4. 输入计数器的说明。

  5. 对于要在该类别中创建的每个计数器,重复步骤 4。

    提示:

    在退出对话框之前,可以在“计数器”列表中选择任一计数器,并编辑它们的值或者删除它们。

    说明:

    默认情况下,在该对话框中创建的计数器和类别支持读写功能,但除非另行指定,否则通过 PerformanceCounter 组件的实例与其进行的交互将限于只读模式。

编程创建新类别和性能计数器集

  1. 创建类型为 CounterCreationDataCollection 的集合。

  2. 将要创建的计数器作为 CounterCreationData 类型的对象进行创建,并设置它们的必需属性。

  3. 通过调用集合的 Add 方法向集合添加 CounterCreationData 对象。

  4. 调用 PerformanceCounterCategory 类的 Create 方法并将该集合传递给它。

    下面的示例显示如何创建一系列计数器,并在创建类别时将它们传递到类别:

    ' Create a collection of type CounterCreationDataCollection.
    Dim CounterDatas As New CounterCreationDataCollection()
    ' Create the counters and set their properties.
    Dim cdCounter1 As New CounterCreationData()
    Dim cdCounter2 As New CounterCreationData()
    cdCounter1.CounterName = "MyCounter1"
    cdCounter1.CounterHelp = "help string"
    cdCounter1.CounterType = PerformanceCounterType.NumberOfItems64
    cdCounter2.CounterName = "MyCounter2"
    cdCounter2.CounterHelp = "help string 2"
    cdCounter2.CounterType = PerformanceCounterType.NumberOfItems64
    ' Add both counters to the collection.
    CounterDatas.Add(cdCounter1)
    CounterDatas.Add(cdCounter2)
    ' Create the category and pass the collection to it.
    PerformanceCounterCategory.Create("Multi Counter Category", _
        "Category help", PerformanceCounterCategoryType.SingleInstance, _
        CounterDatas)
    
         // Create a collection of type CounterCreationDataCollection.
            System.Diagnostics.CounterCreationDataCollection CounterDatas =
               new System.Diagnostics.CounterCreationDataCollection();
            // Create the counters and set their properties.
            System.Diagnostics.CounterCreationData cdCounter1 =
               new System.Diagnostics.CounterCreationData();
            System.Diagnostics.CounterCreationData cdCounter2 =
               new System.Diagnostics.CounterCreationData();
            cdCounter1.CounterName = "Counter1";
            cdCounter1.CounterHelp = "help string1";
            cdCounter1.CounterType = System.Diagnostics.PerformanceCounterType.NumberOfItems64;
            cdCounter2.CounterName = "Counter2";
            cdCounter2.CounterHelp = "help string 2";
            cdCounter2.CounterType = System.Diagnostics.PerformanceCounterType.NumberOfItems64;
            // Add both counters to the collection.
            CounterDatas.Add(cdCounter1);
            CounterDatas.Add(cdCounter2);
            // Create the category and pass the collection to it.
            System.Diagnostics.PerformanceCounterCategory.Create(
                "Multi Counter Category", "Category help",
                PerformanceCounterCategoryType.SingleInstance, CounterDatas);
    

请参见

任务

如何:创建性能计数器类别

概念

类别和计数器管理

参考

如何:访问和初始化服务器资源管理器/数据库资源管理器