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