【问题标题】:How can I improve WMI performance in .NET?如何提高 .NET 中的 WMI 性能?
【发布时间】:2009-06-25 19:31:10
【问题描述】:

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

尽管进行了有限的试验和错误,但在提高 WMI 调用的性能方面我还没有发现任何重大成果。

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

如果有的话,.NET 中面向性能的 WMI 访问的注意事项是什么?

【问题讨论】:

  • 您是在对同一台机器还是对多台机器进行多次调用?如果是后者,你考虑过多线程吗?
  • 现在是同一台机器;该代码用于自动远程安装。代码首先确定已经安装了哪些依赖项,查询操作系统(确定处理器架构、系统目录、程序文件目录、操作系统版本等);它这样做是为了配置安装,然后使用 WMI 启动和监视安装。有一个功能请求,以使它们能够排队并并行运行(例如一次 5 个)。好建议。
  • 啊哈。我在 vbscript 中做了一些非常相似的事情。我的既讨厌又痛苦。祝你好运。

标签: .net wmi performance wql


【解决方案1】:

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

WMI: Improving your WMI application performance in fan-out scenario

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

【讨论】:

  • 感谢您的精彩内容。我的原始帖子表明我确实尝试过“重用连接”,就像链接的博客帖子所表明的那样。我做了一些其他的实验,并得到了显着的改进,我打算写下来,让大家受益。我怀疑 .NET 对象上的某些属性在设置时会导致后续操作重新连接。我打算很快把这些写下来。适用于 DCOM WMI 访问的任何东西也可能也适用于 .NET 类,这确实是有道理的。谢谢!
  • @Devgeezer 您是如何在 .NET 中进行改进的?你写了一个包装器吗?
  • 工作中的其他事情,但这是我记得的:我继承的 WMI 代码建立了许多短的冗余 WMI 连接。大部分时间都花在连接、对 WMI 类进行一次调用、断开连接和重复上。尝试重用连接,甚至在合理的情况下以及其他管理范围的项目中尽可能地查询结果。请记住在不再需要它们时丢弃它们。采用缓存方法,我们的流程从 10 多分钟缩短到大约 2.5 分钟 - 之后 WMI 不再是流程中运行时间最长的部分。
猜你喜欢
  • 2012-04-29
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 2013-09-13
相关资源
最近更新 更多