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

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

有什么想法,指示,建议吗?

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

最佳答案

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

有一个属于EnumerationOptions类的ReturnImmediately属性,如果您成批获取而不是通过网络枚举,则可以帮助您更快地获取结果。

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

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

10-06 12:44
查看更多