在Windows 10中使用WQL查询更改了WMI“事件订阅”吗?

时间:2018-01-12 15:04:27

标签: c# events usb wmi subscription

我在Windows 7上运行了一个C#程序,它可以预订USB插入/删除事件(使用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和Windows 7之间存在差异的任何其他想法10在这里?

1 个答案:

答案 0 :(得分:0)

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

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

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