如何提高.NET中的WMI性能?

如何提高.NET中的WMI性能?,.net,wmi,performance,wql,.net,Wmi,Performance,Wql,我继承了进行大量远程WMI调用的代码。当我反复暂停执行并查看调用堆栈时,它几乎总是在ManagementScope.Connect()调用中。似乎每个WQL查询都有一个新的连接 尽管有有限的尝试和错误,但我还没有发现在提高WMI调用性能方面有任何大的成功 我尝试过缓存以前的结果,重用连接,避免可怕的“select*”。这些并没有给我带来我想要的性能改进。我很想了解环境对WMI性能的影响,但是代码需要在我无法控制的各种环境中运行 如果有的话,在.NET中面向性能的WMI访问有哪些应做和不应做的事情

我继承了进行大量远程WMI调用的代码。当我反复暂停执行并查看调用堆栈时,它几乎总是在
ManagementScope.Connect()调用中。似乎每个WQL查询都有一个新的连接

尽管有有限的尝试和错误,但我还没有发现在提高WMI调用性能方面有任何大的成功

我尝试过缓存以前的结果,重用连接,避免可怕的“
select*
”。这些并没有给我带来我想要的性能改进。我很想了解环境对WMI性能的影响,但是代码需要在我无法控制的各种环境中运行


如果有的话,在.NET中面向性能的WMI访问有哪些应做和不应做的事情?

不是我的专业领域,但这可能会有所帮助:


“在本博客中,我将介绍使用WMI连接到远程计算机以执行多个WMI操作的三种不同方式,以及它们的性能差异。”

感谢您提供的精彩内容。我的原始帖子表明,我确实尝试过“重用连接”,就像链接的博客帖子所指出的那样。我做了一些其他的实验,并取得了显著的进步,我计划为每个人的利益撰写这篇文章。我怀疑.NET对象上存在某些属性,设置这些属性时会导致后续操作重新连接。我计划很快写下来。适用于DCOM WMI访问的内容可能也适用于.NET类,这是有道理的。谢谢@Devgeezer您是如何改进.NET的?你写了一个包装器吗?在工作中的其他东西上,但我记得:我继承的WMI代码产生了许多短的冗余WMI连接。大部分时间用于连接、对WMI类进行一次调用、断开连接和重复。尽量重用连接,甚至在合理时重用查询结果,并尽可能重用其他管理范围项。当你不再需要它们时,记得把它们处理掉。采用缓存方法,我们的进程从10多分钟增加到大约2.5分钟,此后WMI不再是进程中运行时间最长的部分。您是对同一台机器还是对多台机器进行多次调用?如果是后者,您是否考虑过多线程?目前它是同一台机器;该代码用于自动远程安装。代码首先确定已安装的依赖项,查询操作系统(确定处理器体系结构、系统目录、程序文件目录、操作系统版本等);它这样做是为了配置安装,然后使用WMI启动并监视安装。已经有一个功能请求,可以让它们排队并并行运行(例如,一次5个)。好建议,哈哈。我在vbscript中做了一些非常类似的事情。我的既讨厌又痛苦。祝你一切顺利。