利用 Windows Vista 内置的系统性能监视器





5.00/5 (4投票s)
本文展示了如何利用 Vista 在显示性能曲线和直方图时使用的组件。
引言
关于 Windows 性能计数器的文章有很多。
有几种方法可以与这些计数器进行交互。应使用的技术取决于几个因素,例如负责实现的知晓程度、运行计数器消耗应用程序的平台、WMI 的可用性、要收集的数据类型以及当然要执行的诊断类型。
性能计数器最著名的外观是 Windows Vista 内置的 MMC 性能监视器,它托管在“可靠性和性能监视器”管理单元中。查看它的一个简单方法是从命令提示符调用 perform.exe。
在提示时同意 UAC 对话框后,您会看到用于收集诊断数据的著名工具。
从程序员的角度来看,可以使用不同的接口与这些计数器进行交互
System.Diagnostics
.NET 类- WMI 类
- 性能数据助手 (PDH) 函数
- 部分未记录的
NtQuerySystemInformation()
函数
目标
尽管存在这些接口,但(到目前为止)似乎没有比使用旧的基于 COM 的技术更好的方法来以图形方式可视化性能计数器(如在著名的性能计数器管理单元中所做的那样)。当您想处理计数器的图形表示时,.NET Diagnostics
类无济于事。
Visual Studio 2008 IDE 中可用的标准 PerformanceCounter
项内部使用了 Corperfmonext.dll。此组件仅允许访问计数器的内容。
本文展示了如何利用 Vista 在表示性能曲线和直方图时使用的一个组件。通过使用此技术,您可以在自己的诊断应用程序中受益于现有性能计数器的平滑易用的集成。
此外,为了便于集成,您可以受益于在处理 MMC 管理单元时习惯的、众所周知的、非常精细的选择和筛选功能……。
回到根源
COM 尚未消亡!
在后台,Windows Vista 性能监视器使用了一个名为 Sysmon 的 ActiveX 组件,它实现于 \%system32%\sysmon.ocx。
Sysmon 是配置 Microsoft System Monitor ActiveX 控件的 API。System Monitor 控件允许您查看实时和先前记录的性能计数器数据。
下面,Process Explorer 显示了 sysmon.ocx 实例。
事实上,加载了两个 sysmon.ocx 实例。这并非我在 Windows Vista 下首次遇到这种情况。如果有人知道此重复的原因,请传播此信息!谢谢。
System Monitor 控件
对于熟悉 COM 的人来说,oleview.exe 是记录系统中安装的 COM 组件的工具。Oleview.exe 是 Visual Studio 安装在系统上时自动安装的工具的一部分。
使用 oleview.exe,我们甚至可以设置任何 COM 组件的激活权限。
System Monitor 控件版本
在 Windows XP SP3 中,Sysmon.ocx 的版本是 3.6。
在 Windows Vista SP2 和 Windows Server 2008 中,它的版本是 3.7。此版本增加了新的图表类型、选择多个计数器的能力、从图表上的点检索计数器值、将图表计数器值保存到日志文件,以及在图表窗口中连续滚动而不是环绕的行图选项。
托管 Sysmon ActiveX 组件的 .NET 项目
由于它是一个 COM 组件,symon.ocx 可以被任何支持 COM 的应用程序使用。默认情况下,Microsoft Visual Studio 2008 环境不引用 syscom.ocx。在项目中消耗它时,必须显式添加对它的引用。
为项目添加引用
引用后,Sysmon **尚未**在 IDE 工具箱中可见。这也必须手动完成。
将项添加到工具箱
在 Sysmon 添加到工具箱 UI 之前…
将 Sysmon 插入工具箱 UI…
选择 System Monitor 控件
如前所述,sysmon.ocx 在 Windows Vista 中已达到 3.7 版本。这也可以在选择对话框中看到。
System Monitor 控件组件现已可见…
添加到工具箱后,将其拖放到窗体上。完成后,将为项目添加一个私有成员。
因此,一个私有实例包含在类中。
private AxSystemMonitor.AxSystemMonitor sysmon;
为了使用 Sysmon 组件,请使用其命名空间…
using SystemMonitor;
此演示项目在加载窗体时应用了一些(硬编码的)设置。
// Initializing the Sysmon control
private void Form1_Load(object sender, EventArgs e)
{
// Initialize Sysmon
sysmon.BackColor = System.Drawing.Color.Black;
sysmon.BackColorCtl = System.Drawing.Color.Gray;
sysmon.GridColor = System.Drawing.Color.Gray;
sysmon.ShowToolbar = false;
sysmon.ShowValueBar = false;
sysmon.ShowTimeAxisLabels = false;
sysmon.ShowVerticalGrid = true;
sysmon.ShowHorizontalGrid = true;
sysmon.ShowLegend = false;
sysmon.ChartScroll = true;
ICounterItem item;
sysmon.AddCounter("\\Process(*)\\% Processor Time", out item);
}
当然,您可以添加一些控件或界面来与 Sysmon 进行交互。否则,您可以使用适合您诊断的设置构建应用程序并使用它。
开发环境
该项目已在以下条件下编译和测试
- Windows Vista Ultimate 32 位
- Microsoft Visual Studio 2008 专业版
链接
- Sysmon 是 MSDN Diagnostics 中枚举的众多诊断工具和技术之一: http://msdn.microsoft.com/en-us/library/dd408124(VS.85).aspx
- 对于不熟悉性能计数器的人: www.codeproject.com/KB/dotnet/perfcounter.aspx
历史
- 2009 年 7 月首次发布。