4

我正在查询 WMI(win32_perfrawdata_perfproc_process 类)并且发生了一些奇怪的事情:第一次查询它时,它会停止近 50 秒以显示答案。接下来的时间几乎是立即的。

有人看到这种行为吗?有什么可以避免的吗?

要重现这一点,请打开 Powershell 窗口并键入

gwmi win32_perfrawdata_perfproc_process

第一次运行此命令时,它会停止将近 50 秒。第二次几乎是立即的。

布鲁诺

4

1 回答 1

1

六年后回答这个问题是否为时已晚?:)

第一个 WMI 查询(来自任何来源,powershell、wmic命令行或以编程方式通过 COM 调用)大约 20 秒的延迟是正常的。我已经将此追溯到 RPC/TCP 连接。根据Windows 文档

从 Windows Vista 开始,服务控制管理器 (SCM) 支持通过传输控制协议 (RPC/TCP) 和命名管道 (RPC/NP) 的远程过程调用。客户端 SCM 函数默认使用 RPC/TCP。

RPC/TCP 适用于大多数远程使用 SCM 功能的应用程序,例如远程管理或监控工具。但是,为了兼容性和性能,某些应用程序可能需要通过设置本主题中描述的注册表值来禁用 RPC/TCP。

当服务调用远程 SCM 函数时,客户端 SCM 首先尝试使用 RPC/TCP 与服务器端 SCM 通信。如果服务器正在运行支持 RPC/TCP 并允许 RPC/TCP 通信的 Windows 版本,则 RPC/TCPP 连接将成功。如果服务器运行的 Windows 版本不支持 RPC/TCP,或者支持 RPC/TCP 但在只允许命名管道流量的防火墙后面运行,则 RPC/TCP 连接超时并且 SCM 重试与 RPC 的连接/NP。这最终会成功,但可能需要一些时间(通常超过 20 秒),导致 OpenSCManager 功能出现阻塞。

上面的链接指定了可以更改以消除此延迟的注册表值。他们在HKLM\SYSTEM\CurrentControlSet\Control. SCMApiConnectionParam通过将超时值更改为 5000,我能够将延迟缩短到仅 5 秒。

于 2019-09-20T17:00:02.797 回答