gpt4 book ai didi

C# - 多个服务器的 WMI 查询太慢

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:10 32 4
gpt4 key购买 nike

我正在尝试从远程 win2008 服务器返回所有已启用的功能。这实际上根本不是问题 - 只要我知道要查询的内容即可。

然而,我遇到的问题是,当我的查询找不到结果时,验证该功能是否已安装需要很长时间 - 有时长达 2 分钟。 (查询超过 600 个节点时不够好)。

下面的代码是我发现的最快的方法,但是正如我所说:返回 false 需要很长时间:

 public bool serverFeatureEnabled(string machineName, Win32_ServerFeature_ID id)
{
ManagementClass serviceClass = new ManagementClass("Win32_ServerFeature");
string strScope = string.Format(@"\\{0}\root\cimv2", machineName);
ConnectionOptions conOpt = new ConnectionOptions();
serviceClass.Scope = new ManagementScope(strScope, conOpt);

foreach (ManagementObject obj in serviceClass.GetInstances())
{
if ((UInt32)obj["ID"] == (uint)id)
{
return true;
}

}
return false;
}

有没有人对此有更好的想法,我不介意它是否根本不使用 WMI 查询。

我只想加快速度。

希望我说得有道理!

感谢任何帮助。

编辑:

我曾尝试按照 Sergrey V 的建议“使用 ManagementObjectSearcher 类直接从服务器功能中选择所需的功能”。

它确实加快了第一个 false 的返回速度,但是它需要大约 14 秒才能完成,所有在集群中查询的所有服务器加起来总共需要 140 分钟。

编辑 2:

我尝试使用 WBEMTEST(Windows Management Instrumentation Tester)针对 Win32_ServerFeature 运行测试,与远程计算机的连接似乎是问题所在 - 针对其中一台远程计算机运行测试需要大约 12 秒的连接时间和大约 2 秒的时间返回数据。

因此,Sergrey V 提出的解决方案似乎是迄今为止 WMI 查询最快的解决方案。

最佳答案

不要连续运行 Action 。我不知道 WMI 内部是否存在瓶颈,但最明显的优化是并行运行整个过程。

关于C# - 多个服务器的 WMI 查询太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11761958/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com