Windows性能计数器的深入探索

Windows操作系统中,性能计数器是衡量系统性能的重要工具。它们提供了一种方法来监控系统资源的使用情况,例如CPU、内存和磁盘I/O等。本文将探讨如何通过不同的技术接口与这些计数器进行交互,以及如何将它们集成到自定义的诊断应用程序中。

性能计数器的交互路径

性能计数器交互的路径有多种,选择哪种技术取决于多种因素,比如实施者的专业知识、应用程序运行的平台、WMI的可用性、需要收集的数据类型,以及要进行的诊断类型。

性能计数器最著名的表现形式是Windows Vista内置的MMC性能监视器,它托管在“可靠性和性能监视器”插件中。一个简单的查看方法是从命令提示符调用perform.exe

从程序员的角度来看,可以使用不同的接口与这些计数器进行交互:

  • .NET类System.Diagnostics
  • WMI类
  • 性能数据助手(PDH)函数
  • 部分未文档化的NtQuerySystemInformation()函数

目标

尽管存在这些接口,但似乎还没有比使用旧的基于COM的技术更好的方法来以图形方式可视化性能计数器(就像在众所周知的性能计数器插件中所做的那样)。.NET的Diagnostics类在处理计数器的图形表示时并没有帮助。

在Visual Studio 2008 IDE中可用的标准PerformanceCounter项内部使用Corperfmonext.dll。这个组件只允许访问计数器的内容。

本文展示了如何利用Vista在表示性能曲线和直方图时使用的一个组件。通过使用这种技术,可以在自己的诊断应用程序中顺利且轻松地集成现有的性能计数器。

回归基础:COM并未消亡

在幕后,WindowsVista性能监视器使用一个名为Sysmon的ActiveX组件,它实现在\%system32%\sysmon.ocx中。Sysmon是配置Microsoft系统监视器ActiveX控件的API。系统监视器控件允许查看实时和之前记录的性能计数器数据。

对于熟悉COM的人来说,oleview.exe是记录系统上安装的COM组件的工具。Oleview.exe是当Visual Studio安装在系统上时自动安装的工具之一。

WindowsXP SP3中,Sysmon.ocx的版本是3.6。在Windows Vista SP2和Windows Server 2008中,它的版本是3.7。这个版本增加了新的图表类型、选择多个计数器的能力、从图表上的点检索计数器值、将图表计数器值保存到日志文件,以及在图表窗口中让折线图连续滚动而不是自环绕的选项。

由于它是一个COM组件,sysmon.ocx可以被任何COM感知的应用程序使用。默认情况下,syscom.ocx没有被Microsoft Visual 2008环境引用。在项目中使用它时,必须明确添加引用。

一旦引用了Sysmon,它在Toolbox IDE中还不可见。这也必须手动完成。

在将Sysmon添加到工具箱UI之前...插入Sysmon到工具箱UI...选择系统监视器控件。

如前所述,sysmon.ocx在Windows Vista中已经达到了3.7版本。这也可以在选择对话框中看到。系统监视器控件组件现在在UI中可见...一旦添加到工具箱,拖放到表单上。完成后,会在项目中添加一个私有成员:

private AxSystemMonitor.AxSystemMonitor sysmon;

为了使用Sysmon组件,请使用它的命名空间:

using SystemMonitor;

这个演示项目在加载表单时应用了一些(硬编码)设置。

该项目已在以下条件下编译和测试:

  • Windows Vista Ultimate 32位
  • Microsoft Visual Studio 2008 Professional Edition
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485