performance - 在 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 枚举吗?提前致谢。
解决方案
尽量不要在 WQL 查询中使用 *。不按任何属性进行过滤只会大大降低 WMI 查询的速度。取而代之的是,准确地指定您需要的属性,而不是其他:
SELECT LoadPercentage FROM Win32_Processor WHERE DeviceID='CPU0'
推荐阅读
- javascript - 使用 axios 在 .then() Promise 中访问嵌套 if else 中的返回值
- javascript - 有人可以帮我理解这段 JavaScript 代码吗
- node.js - 如何将 ObjectId 添加到猫鼬中的默认 [Array]?
- python - 编写一个函数来验证它作为参数的数字是否是阿姆斯壮数
- ios - 如何使用 SwiftUI 对 BezierPath 定义的自定义cornerRadius 进行动画更改?
- sql - SQL查询:一个表/时间序列对另一个表的反应,对于每个用户
- c++ - 两个排序数组的中位数超过时间限制的问题
- javascript - 条纹确认付款:payment_intent 和 payment_intent_client_secret 未在我的重定向网址上设置
- java - Java Spring Boot 应用程序中“私有”辅助方法的替代方案
- mysql - 单个子查询很快。添加 1 个子查询很快。但是,将超过 1 个子查询一起添加会使 MySQL 崩溃。怎么修?