我使用在.NET System.Management命名空间来对远程服务器执行各种WMI查询。 在我的日志,我可以看到,有时查询需要30秒或40秒,而其他时间完成查询完成在不到一秒钟。
当我看到这些查询速度慢,我尝试连接到使用WBEMTEST箱子,但它始终连接并快速执行查询。
任何想法,指针,建议?
在System.Management.ManagementScope在反射镜看,它似乎渗漏,IwbemServices下面指针时,我没有注意到。 看起来这是一个需要有释放它调用一个COM接口(对Marshal.ReleaseComObject())。 我不知道这是相关或不相关。 我做的过程的生命周期中连接到许多不同的服务器。
我有同样的应用程序,它确实对各种不同类型设备的多个WMI查询和我遇到相同的行为。 使用WBEMTEST有时快,但也不一定。 我还发现在同一台机器上的一些疑问在同一台机器上的行为不同,然后其他疑问,只是因为不同类的查询。
有属于EnumerationOptions类,如果你在一个批处理得到他们,而不是他们列举在网络上的这可能会帮助你得到的结果更快ReturnImmediately属性。
EnumerationOptions options = new EnumerationOptions();
options.ReturnImmediately = false;
你可以尝试,看看是否有帮助。 我知道这是不是你想要听到的,但我个人的看法是,有没有什么可以做的。 您需要编写代码角落找寻问题的工作。 真正的答案是介于深DCOM,WMI协议和WMI储备库的碗安葬。
你可以尝试,并设置WITHIN场,看它是否强制查询到的还要来得快。 你可以发布你正在使用的查询? 这可能会帮助调试任何进一步的问题
针对一个盒子的问题? 我曾经与一个远程情景同样的问题。 我通过重建于使远程调用框中的TCP / IP协议栈固定它。
看看进入WBEM_FLAG_RETURN_IMMEDIATE&WBEM_FLAG_FORWARD_ONLY标志为您的语言。 当使用的Scriptomatic(从MS伟大的小VBScript的GUI制作WMI调用)这个选项将自动添加为这个选项的一部分。 48种手段WBEM_FLAG_RETURN_IMMEDIATE | WBEM_FLAG_FORWARD_ONLY。 VBScript示例:
objWMIService.ExecQuery ("Select * from Win32_NetworkConnection",,48)
https://msdn.microsoft.com/en-us/library/aa390880(v=vs.85).aspx