远程WMI查询速度慢

时间:2014-06-26 08:28:44

标签: c# wmi

我正在研究一个查询三个不同服务器的程序,以获取CPU和LogicalDisk信息。

我查询的每个服务器都会在6到15秒内返回值(取决于服务器)。因此,我需要总共31秒来获取所有值(第一台服务器为15秒,第二台服务器为6秒,第三台服务器为10秒)。

我尝试多线程每个查询,它减少了每个服务器1秒的执行时间,所以我不认为它是解决方案。

我还尝试直接在服务器中使用powershell运行查询:

  • 第一台服务器:检索信息需要10秒钟(而不是15秒)

  • 第二台服务器:需要10秒钟(就像我远程操作一样)来检索信息

  • 第三台服务器)花了大约1秒钟(而不是6秒)

以下是我的疑问:

SELECT LoadPercentage From WIN32_Processor

SELECT Size, FreeSpace From WIN32_LogicalDisk

我的问题是:我的服务器上有什么可以使查询更容易吗? 我已经尝试停用防火墙和防病毒软件。

PS:我正在查询Windows 2003 R2服务器,Win XP专业版和Win 7服务器,每个服务器都与我的本地计算机位于同一个域中。

5 个答案:

答案 0 :(得分:1)

也许通过使用CIM而不是WMI可以加速整个事情。

您可以在此处找到效果比较:http://community.spiceworks.com/topic/332657-powershell-cmdlet-performance-get-wmiobject-vs-get-ciminstance

当然,您也可以在C#中获得特定的CimInstance: https://msdn.microsoft.com/en-us/library/dn313201(v=vs.85).aspx

答案 1 :(得分:0)

尝试在本地查询以调查性能问题。如果仍然很慢,请调查您的查询。

我不知道你的项目规格是什么,但我会这样做: 1)创建一个查询的控制台应用程序 2)每10-15分钟启动一次,在服务器上安排它 3)推送MSMQ或登录数据库或Web服务。 4)应该将控制台应用程序部署为clickonce,以便在需要其他性能计数器时有一个单点可以更新。

答案 2 :(得分:0)

由于您列出了两个不同的查询,因此了解它们是慢还是只有其中一个会很有趣。

在过去,我遇到过一些Windows版本对WIN32_Processor的查询速度很慢。如果是这种情况,也许你可以从其他(希望更具响应性)的对象中获取所需的信息,例如Win32_PerfFormattedData_Counters_ProcessorInformation:

SELECT PercentProcessorTime FROM Win32_PerfFormattedData_Counters_ProcessorInformation

答案 3 :(得分:0)

查看您的语言的WBEM_FLAG_RETURN_IMMEDIATE标志。使用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

答案 4 :(得分:0)

您可以尝试两件事来检查它是否适用于您。

  1. 尝试使用PowerShell脚本。 http://www.powershellpro.com/powershell-tutorial-introduction/powershell-scripting-with-wmi/

  2. 或者您可以使用Windows中提供的工具 - 名为 wbemtest 。 如果您没有使用任何编程语言查询WQL以上,那么您应该尝试以上两个选项。