首页 > 解决方案 > 在 Windows Server 2016 上枚举 WMI 速度明显变慢

问题描述

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

这是我的简短脚本:

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 服务器上的相同脚本需要 2 秒。可以做些什么来优化 WMI 枚举吗?提前致谢。

标签: performancevbscriptwmienumerationwindows-server-2016

解决方案


尽量不要在 WQL 查询中使用 *。不按任何属性进行过滤只会大大降低 WMI 查询的速度。取而代之的是,准确地指定您需要的属性,而不是其他:

SELECT LoadPercentage FROM Win32_Processor WHERE DeviceID='CPU0'

推荐阅读