演练:更改和检索性能计数器值
更新:2007 年 11 月
本演练中的过程演示如何使用 PerformanceCounter 类上的方法来使用性能计数器的值。性能计数器是 Windows 收集不同系统资源上性能数据的方法。Windows 包含一组预定义的计数器,组织成类别,您可以与它们进行交互。从计数器检索的值既可以是原始值,也可以是随时间变化的计算值。有多种方法可用来增加和减少计数器的当前值。
在本演练的过程中,您将:
创建并配置 PerformanceCounter 组件以与系统提供的计数器进行交互。
创建包含 UI 元素的 Windows 应用程序,这些 UI 元素检索并显示计数器中的值。
编写使用 RawValue 属性的代码,设置并检索计数器的原始值。
编写使用 Increment、IncrementBy 和 M:System.Diagnostics.PerformanceCounter.Decrement 方法的代码,更改计数器的值并检索其新值。
说明: |
---|
对于在以下说明中使用的某些 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。单击“确定”以创建新类别和计数器。
说明: 本步骤需要注册表的写权限。如果您无法创建新计数器,请与系统管理员联系。
在“服务器资源管理器”中,浏览到新计数器并将其拖到窗体上。为新计数器 MyNewCounter 配置的新 PerformanceCounter 组件将添加到项目中。
说明: 这些步骤在您的计算机上创建计数器。如果要部署此应用程序,则必须在目标计算机上创建计数器。通过将安装程序添加到项目中,可以完成该任务。选择 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”。单击“添加”完成。
单击工具栏中的“查看报表”以显示计数器的值。