我需要开发一个代理 windows 服务,它总是只监视当前安装的机器中的资源。受监视的资源可能是处理器运行状况、SNMP 陷阱、SQL Server 运行状况。
我发现这可以在 .NET 中使用 WMI 或 Perfmon 以编程方式实现。
我不确定使用哪一种。我正在寻找利弊,以及在哪种情况下我们需要选择每个选项。
我需要开发一个代理 windows 服务,它总是只监视当前安装的机器中的资源。受监视的资源可能是处理器运行状况、SNMP 陷阱、SQL Server 运行状况。
我发现这可以在 .NET 中使用 WMI 或 Perfmon 以编程方式实现。
我不确定使用哪一种。我正在寻找利弊,以及在哪种情况下我们需要选择每个选项。
一般来说,如果在 Perform 中有一个计数器可用,我会从那里开始,但您至少会同时使用 Perform 和 WMI。举个例子:
如果我想监控机器上使用的总内存百分比,我会使用 Perfmon 计数器“Memory,Available Kbytes”。我还将按照以下方式使用 WMI 获取机器上的总内存:
new ManagementObjectSearcher("root\\CIMV2", "select * from win32_computersystem")
然后将 totalphysicalmemory 属性存储到一个名为 totalKBytes 的变量中。
现在,每当我想计算使用的内存百分比时,我都会进行计算:
(1.0f - (counter.NextValue() / totalKBytes)) * 100.0f
结论是不要陷入在执行或 WMI 之间做出决定的过程中。你至少需要他们两个。一旦你真正开始监控,你可能还会发现自己从注册表读取、运行自定义脚本、读取文件系统等。