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

标签 windows performance powershell performance-testing

我正在创建一个工具来跟踪内存和 CPU 使用情况或选择的特定进程。为了使工具更加精确,我需要密切跟踪资源,每隔 50 毫秒探测一次。

假设现代计算机内部发生的任何事情(不包括网络 IO、用户输入)都不会花费比这更多的时间(如果计算量不大,它应该非常快)。我错了,Get-WMIObject CMD'let 需要更多的时间才能返回结果,请比较:

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 #>

问题:为什么它这么慢,我能做些什么(主要动机是使用私有(private)工作集和 Get-WMIObject 在我的工具中提供的许多其他指标)。从 C/C++/C# 实用程序与 Win32_PerfRawData_PerfProc_Process 进行交互是否是在 Powershell 中使用它的一个很好的替代方案?

最佳答案

并不是要听起来悲观什么,但在 powershell 中,速度很慢,而且速度更慢。使用测量命令来查找“东西”运行所需的时间。 用法: 测量命令 { Get-WMIObject Win32_Process -Filter "ProcessId='24380'"}

与 wmi 存储交互的“现代”方式是使用 CIM 实例。看看使用您正在使用的时间方法或测量命令是否更快。 例子:/ Measure-Command {Get-Ciminstance -classname Win32Process -filter "processID='24380'"}

关于windows - 为什么 Powershell 中的 Get-WMIObject Win32_Process 如此慢,有哪些替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45226455/

相关文章:

c - 如何检查指针是否有效?

azure - 用于修改 Azure Blob 存储中对象的 ContentType 的 Powershell 函数

windows - -在 cmdlet Get-WmiObject 中列出属性

performance - 在 OpenGL 中不断向 GPU 上传新纹理的开销是多少?

java - 使用 Java 进行负载测试 - 计时器任务与调度程序

performance - 如何使RabbitMQ具有可扩展性?

powershell - 如何将带有空格的参数作为数组传递给 Powershell 中的 RoboCopy?

windows - 我们不能将 abc.c 和 ABC.c 放在同一个文件夹中吗?有人可以解释一下原因吗

windows - 如何在 Windows 上安装 pip?

windows - 在 windows 上使用 zlib 1.2.8 编译时出错