我正在研究一个查询三个不同服务器的程序,以获取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服务器,每个服务器都与我的本地计算机位于同一个域中。
答案 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)
您可以尝试两件事来检查它是否适用于您。
尝试使用PowerShell脚本。 http://www.powershellpro.com/powershell-tutorial-introduction/powershell-scripting-with-wmi/
或者您可以使用Windows中提供的工具 - 名为 wbemtest 。 如果您没有使用任何编程语言查询WQL以上,那么您应该尝试以上两个选项。