使用 WMI 或 Perfmon 进行监控(在 .NET 中以编程方式)

Monitoring using WMI or Perfmon (programmatically in .NET)

我需要开发一个代理 windows 服务,它将始终只监视当前安装的机器中的资源。受监控的资源可能是处理器健康状况、SNMP 陷阱、SQL 服务器健康状况。

我发现这可以在 .NET 中使用 WMI 或 Perfmon 以编程方式实现。

我不确定使用哪一个。我正在寻找优点和缺点,以及在哪种情况下我们需要为每个选项选择。

通常,如果 Perform 中有可用的计数器,我会从那里开始,但您至少会同时使用 Perform 和 WMI。例如:

如果我想监控机器上使用的总内存百分比,我会使用 Perfmon 计数器 "Memory,Available Kbytes"。我还将使用 WMI 沿着以下几行获取机器上的总内存:

new ManagementObjectSearcher("root\CIMV2", "select * from win32_computersystem")

然后将总物理内存 属性 存储到名为 totalKBytes 的变量中。

现在,每当我想计算使用的内存百分比时,我都会进行计算:

(1.0f - (counter.NextValue() / totalKBytes)) * 100.0f

结论是不要在 Perform 或 WMI 之间犹豫不决。您将至少需要它们。一旦真正开始监控,您可能还会发现自己正在读取注册表、运行 自定义脚本、读取文件系统等。