在Windows Server 2016上枚举WMI明显较慢

时间:2019-03-26 17:17:54

标签: performance vbscript wmi enumeration windows-server-2016

我正在使用一个简单的vb脚本来获取CPU0的负载百分比,但是Windows Server 2016上的WMI枚举要慢于旧版本,因此我需要优化速度。

这是我的简短剧本:

Option Explicit
Dim objWMIService, processItems, objitem, loadpercentage
loadpercentage= 0

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

Set processItems = objWMIService.ExecQuery("SELECT * FROM Win32_Processor _
                   WHERE DeviceID='CPU0'", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)

For Each objItem In processItems 
    loadpercentage =  objItem.LoadPercentage
Next

设置processItems与进入For Each循环之间有10秒的延迟。 Windows Server的较早版本上的相同脚本需要2秒。可以做任何事情来优化WMI枚举吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

尽量不要在WQL查询中使用*。没有任何属性的筛选只会大大减慢WMI查询的速度。与其相反,确切地指定所需的属性,而无需其他任何操作:

SELECT LoadPercentage FROM Win32_Processor WHERE DeviceID='CPU0'