更新:2007 年 11 月
本演练中的过程演示如何使用 PerformanceCounter 类上的方法来使用性能计数器的值。性能计数器是 Windows 收集不同系统资源上性能数据的方法。Windows 包含一组预定义的计数器,组织成类别,您可以与它们进行交互。从计数器检索的值既可以是原始值,也可以是随时间变化的计算值。有多种方法可用来增加和减少计数器的当前值。
在本演练的过程中,您将:
- 创建并配置 PerformanceCounter 组件以与系统提供的计数器进行交互。 
- 创建包含 UI 元素的 Windows 应用程序,这些 UI 元素检索并显示计数器中的值。 
- 编写使用 RawValue 属性的代码,设置并检索计数器的原始值。 
- 编写使用 Increment、IncrementBy 和 M:System.Diagnostics.PerformanceCounter.Decrement 方法的代码,更改计数器的值并检索其新值。 
| .gif) 说明: | 
|---|
| 对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您使用的 Visual Studio 版本及设置。有关更多信息,请参见Visual Studio 设置。 | 
创建 Windows 应用程序
- 在“文件”菜单上指向“新建”,然后单击“项目”。 
- 在“新建项目”对话框中,创建 Visual Basic 或 Visual C# 的“Windows 应用程序”。将项目命名为 PerformanceCounterExample。 
- 在“工具箱”的“Windows 窗体”选项卡中,向应用程序添加以下控件: - 两个标签 
- 一个文本框 
- 五个按钮 
 
- 在控件上设置以下属性: - 控件 - 属性 - 值 - Label1 - Name - lblCounterValue - Text - (空白) - Label2 - Name - lblSystemCounterValue - Text - (空白) - Textbox1 - Name - txtValue - Text - (空白) - Button1 - Name - btnSetRawValue - Text - 设置自定义计数器的原始值 - Button2 - Name - btnGetNextValue - Text - 获取系统计数器的下一个值 - Button3 - Name - btnIncrement - Text - 将自定义计数器的值增加 1 - Button4 - Name - btnDecrement - Text - 将自定义计数器的值减少 1 - Button5 - Name - btnIncrementBy - Text - 将自定义计数器增加一个值 
- 随意排列控件。 
- 保存您的工作。 
创建并配置 PerformanceCounter 组件
- 打开“服务器资源管理器”并访问“服务器”节点。有关更多信息,请参见如何:访问和初始化服务器资源管理器/数据库资源管理器。 
- 在“服务器”节点下找到您的计算机列表并展开它。您将看到性能计数器、消息队列、事件日志和服务的项。 
- 展开“性能计数器”节点并找到“Processor”节点。 
- 找到“% Processor Time”节点并将其展开。 
- 将 _Total 计数器拖到窗体上。为 _Total 计数器配置的 PerformanceCounter 组件被添加到项目中。此组件在 Visual Basic 中命名为 PerformanceCounter1,在 Visual C# 中命名为 performanceCounter1。 
检索系统计数器的原始值
- 在设计器中,双击“获取系统计数器的下一个值”按钮以创建 Click 事件处理程序。该方法将报告计数器的计算值,而不是原始值。添加以下代码来检索并显示 PerformanceCounter 实例正在监视的计数器的下一个值: - Private Sub btnGetNextValue_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnGetNextValue.Click lblSystemCounterValue.Text = _ "The current value of the system counter is: " _ & PerformanceCounter1.NextValue().ToString() End Sub- private void btnGetNextValue_Click(object sender, System.EventArgs e) { lblSystemCounterValue.Text = "The current value of the system counter is: " + performanceCounter1.NextValue().ToString(); }
在剩下的过程中,您将使用自定义类别和计数器。
创建自定义计数器和类别
- 在“视图”菜单中,单击“设计器”以访问 Form1 的设计器。 
- 在设计器中,打开“服务器资源管理器”并访问“服务器”节点。有关更多信息,请参见如何:访问和初始化服务器资源管理器/数据库资源管理器。 
- 在“服务器”节点下找到您的计算机列表并展开它。 
- 右击“性能计数器”节点,再单击“创建新类别”。 - 将出现“性能计数器生成器”对话框。 
- 在“类别名称”中输入 MyNewCategory。 
- 单击“新建”添加新的计数器,将其命名为 MyNewCounter。单击“确定”以创建新类别和计数器。 .gif) 说明: 说明:- 本步骤需要注册表的写权限。如果您无法创建新计数器,请与系统管理员联系。 
- 在“服务器资源管理器”中,浏览到新计数器并将其拖到窗体上。为新计数器 MyNewCounter 配置的新 PerformanceCounter 组件将添加到项目中。 .gif) 说明: 说明:- 这些步骤在您的计算机上创建计数器。如果要部署此应用程序,则必须在目标计算机上创建计数器。通过将安装程序添加到项目中,可以完成该任务。选择 PerformanceCounter 对象,然后在“属性”窗口中单击“添加安装程序”。(如果此命令不可用,请右击“属性”窗口并单击“命令”。) 有关更多信息,请参见 安装组件介绍。 
设置自定义计数器的原始值
- 在设计器中,选择 Visual Basic 中的 PerformanceCounter2 或 Visual C# 中的 performanceCounter2。 
- 将 ReadOnly 属性设置为 false。 
- 双击 btnSetRawValue 按钮,在代码编辑器中创建 Click 事件处理程序。 
- 添加以下代码,设置所创建的计数器的原始值,并在第一个标签控件中显示计数器的值。 - Private Sub btnSetRawValue_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnSetRawValue.Click PerformanceCounter2.RawValue = CLng(txtValue.Text) lblCounterValue.Text = PerformanceCounter2.NextValue().ToString() End Sub- private void btnSetRawValue_Click(object sender, System.EventArgs e) { performanceCounter2.RawValue = long.Parse(txtValue.Text); lblCounterValue.Text = performanceCounter2.NextValue().ToString();- } 
将自定义计数器的值增加 1 并显示它
- 在设计器中,双击“将自定义计数器的值增加 1”按钮以在代码编辑器中创建 Click 事件处理程序。 
- 添加以下代码,使自定义计数器增加 1,并在第一个标签控件中显示计数器的值。 - Private Sub btnIncrement_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnIncrement.Click PerformanceCounter2.Increment() lblCounterValue.Text = PerformanceCounter2.NextValue().ToString() End Sub- private void btnIncrement_Click(object sender, System.EventArgs e) { performanceCounter2.Increment(); lblCounterValue.Text = performanceCounter2.NextValue().ToString();- } 
减少自定义计数器的值并显示该值
- 在设计器中,双击“将自定义计数器的值减少 1”按钮以在代码编辑器中创建 Click 事件处理程序。 
- 添加以下代码,使计数器值减少 1,并在第一个标签控件中显示计数器的值。 - Private Sub btnDecrement_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnDecrement.Click PerformanceCounter2.Decrement() lblCounterValue.Text = PerformanceCounter2.NextValue().ToString() End Sub- private void btnDecrement_Click(object sender, System.EventArgs e) { performanceCounter2.Decrement(); lblCounterValue.Text = performanceCounter2.NextValue().ToString();- } 
按用户定义的值增加自定义计数器的值
- 在设计器中,双击“将自定义计数器增加一个值”按钮以在代码编辑器中创建 Click 事件处理程序。 
- 添加以下代码,使计数器值增加文本框中输入的值,并在第一个标签控件中显示计数器的值。 - Private Sub btnIncrementBy_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnIncrementBy.Click PerformanceCounter2.IncrementBy(CLng(txtValue.Text)) lblCounterValue.Text = PerformanceCounter2.NextValue().ToString() End Sub- private void btnIncrementBy_Click(object sender, System.EventArgs e) { performanceCounter2.IncrementBy(long.Parse(txtValue.Text)); lblCounterValue.Text = performanceCounter2.NextValue().ToString(); }
测试应用程序
- 保存文件。 
- 按 F5 键编译并启动应用程序。 
- 单击“获取系统计数器的下一个值”按钮以检索处理器类别的计数器的当前值。由于您正在使用 NextValue() 方法检索值,因此第一次调用将返回 0。 - 您应该看到当前值显示在标签中。 
- 在文本框中键入 25 并单击“设置自定义计数器的原始值”。 - 应该更新标签字段以指示原始值现在为 25。 
- 单击“将自定义计数器的值增加 1”按钮。 - 标签中的值应增加 1。 
- 单击“将自定义计数器的值减少 1”按钮。 - 标签中的值应减少 1。 
- 在文本框中输入 25 并单击“将自定义计数器增加一个值”。 - 标签中的值应增加 25。 - 您还可以在 Windows 性能工具中查看性能计数器。 
在 Windows 性能工具中查看性能计数器
- 打开“性能”工具,此工具是“Microsoft 管理控制台”的一部分。请参考操作系统“帮助”,以找到用于打开“性能”工具的步骤。 
- 右击性能关系图下面的计数器列表,然后单击“添加计数器”。 
- 从“性能对象”列表中选择“MyNewCategory”,并从计数器列表选择“MyNewCounter”。单击“添加”完成。 
- 单击工具栏中的“查看报表”以显示计数器的值。