使用 WQL 查询的 WMI "Event subscriptions" 在 Windows 10 中是否发生了变化?

Has WMI "Event subscriptions" using WQL queries changed in Windows 10?

我在 Windows 7 上有一个 C# 程序 运行,它可以毫无问题地订阅 USB insert/remove 事件(使用 WMI API)。在 Windows 10 台机器上,同一程序使用过多 CPU。所以我想知道 Windows 10 中的 WMI 实现是否发生了变化?程序代码如下:

 WqlEventQuery insertUSBDeviceQuery = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_PnPEntity'");
        insertWatcher = new ManagementEventWatcher(insertUSBDeviceQuery);
        insertWatcher.EventArrived += new EventArrivedEventHandler(DeviceInsertedEvent);
        insertWatcher.Start();

在 Windows 10 这会导致 WmiPrvSE.exe(WMI 提供程序主机)进程使用大约 30% 的 CPU。

为什么我们在这里看到 Windows 7 和 10 之间的差异还有其他想法吗?

我们没有找到这个问题的答案。 但是因为我们确切地知道我们正在寻找什么设备,所以我们最终使用这个查询每 5 秒轮询一次数据。

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"select DeviceID from Win32_PnPEntity Where DeviceID Like 'USB\VID_" + vid + "&PID_" + pid + "%'"))

这样效率更高,并且不会导致任何 CPU 使用问题。