为什么WMI查询有时很慢?

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

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

任何想法,指针,建议?

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


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

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

EnumerationOptions options = new EnumerationOptions();
options.ReturnImmediately = false;

你可以尝试一下,看看它是否有帮助。 我知道这不是你想听到的,但我个人的观点是你没有太多的事情可以做。 你需要编写代码才能解决问题。 真正的答案出现在DCOM碗,WMI协议和WMI存储库深处。


您可以尝试设置WITHIN字段以查看它是否强制查询更早发生。 你能发布你正在使用的查询吗? 这可能有助于调试任何其他问题


问题是特定于一个盒子吗? 我曾经有过与远程场景相同的问题。 我通过在进行远程调用的盒子上重建TCP / IP堆栈来修复它。

链接地址: http://www.djcxy.com/p/43307.html

上一篇: Why are WMI Queries so slow sometimes?

下一篇: Ads inside a Windows application. Suggest an ad network, please