为什么WMI查询有时会这么慢?

Jos*_*ark 10 c# wmi

我在.Net中使用System.Management命名空间来对远程服务器执行各种WMI查询.在我的日志中,我可以看到有时查询需要30或40秒才能完成,而有时查询在不到一秒的时间内完成.

当我看到这些慢查询时,我尝试使用wbemtest连接到该框,但它总是连接并快速执行查询.

任何想法,指针,建议?

当我在反射器中查看System.Management.ManagementScope时,我注意到它似乎泄漏了IWbemServices指针.看起来这是一个需要在其上调用Release的COM接口(Marshal.ReleaseComObject()).我不确定这是否相关.我在流程的生命周期中连接到许多不同的服务器.

Mar*_*ark 2

我有同一种应用程序,它在所有不同类型的设备上执行多个 WMI 查询,并且我遇到了相同的行为。使用 wbemtest 有时会更快,但不一定。我还发现同一台机器上的一些查询的行为与同一台机器上的其他查询不同,仅仅是因为不同的类是查询。

有一个属于 EnumerationOptions 类的 ReturnImmediately 属性,如果您批量获取结果而不是通过网络枚举它们,它可能会帮助您更快地获得结果。

EnumerationOptions options = new EnumerationOptions();
options.ReturnImmediately = false;
Run Code Online (Sandbox Code Playgroud)

您可以尝试一下,看看是否有帮助。我知道这不是您想听到的,但我个人的观点是您无能为力。您需要编写代码来解决该问题。真正的答案隐藏在 DCOM、WMI 协议和 WMI 存储库的深处。