为什么Powershell中的Get-WMIObject Win32_Process如此缓慢以及有哪些替代方案?

时间:2017-07-20 22:55:01

标签: windows performance powershell performance-testing

我正在创建一个工具来跟踪内存和CPU使用情况或特定的选择过程。为了使工具精确,我想要密切跟踪资源,每次探测它们,50ms让我们说。

假设在现代计算机内发生的任何事情(不包括网络IO,用户输入)都不会花费更多的时间(如果它不是一个很大的计算它应该非常快)。我错了,Get-WMIObject CMD'让更多的东西返回结果,请比较:

time { Get-WMIObject Win32_Process -Filter "ProcessId='24380'"} -Samples 10 -Silent
# ..........
# Avg: 190.5335ms
# Min: 180.3689ms
# Max: 203.6968ms #>

-

time { get-process -name *chrome* 2> $null } -Samples 10 -Silent
# ..........
# Avg: 5.2ms
# Min: 3.7711ms
# Max: 13.5161ms #>

问题:为什么它如此缓慢,我该怎么办呢(主要动机是使用私有工作集和Get-WMIObject在我的工具中提供的许多其他指标)。与C / C ++ / C#实用程序中的Win32_PerfRawData_PerfProc_Process交互是否可以替代在Powershell中使用它?

1 个答案:

答案 0 :(得分:1)

不要听起来悲观或任何事情,但在powershell中,速度很慢而且速度较慢。使用measure-command查找“stuff”运行所需的时间。 用法:     Measure-command {Get-WMIObject Win32_Process -Filter“ProcessId ='24380'”}

与wmi商店交互的“现代”方式是使用CIM实例。使用您正在使用的时间方法或measure-command查看是否更快。 例:/      Measure-Command {Get-Ciminstance -classname Win32Process -filter“processID ='24380'”}