我在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在这里?
答案 0 :(得分:0)
我们没有找到这个问题的答案。 但是,由于我们确切地知道我们正在寻找什么设备,因此我们最终使用此查询每5秒轮询一次数据。
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"select DeviceID from Win32_PnPEntity Where DeviceID Like 'USB\\VID_" + vid + "&PID_" + pid + "%'"))
这样效率更高,并且不会导致任何CPU使用问题。