访问HID顶级集合的速度缓慢

简要描述;简介:

  • 我的HID设备拥有许多顶级集合。
  • 应用程序不断查询收集细节。
  • 瓶颈是 – SetupDiGetClassDevs()似乎很慢。

详细说明:

我的代码基本上遵循MSbuild议如何查找和获取HID集合的句柄。 然后,我使用这个句柄来获取相应的预处理数据,从中获得我需要的数据。

目前,我的代码每当用户需要获取数据(例如button数,轴最小/最大值)时都会这样做。 这是一个缓慢的业务。 分析器明确指出,主要的原因是SetupDiGetClassDevs() ,它似乎很慢。

要保存句柄(或者我认为)是不可能的,因为它可能会阻止系统进行更改,例如删除设备或重新排列设备。 我仍然需要看看如果我在整个会话中打开顶层句柄会发生什么。

我正在考虑的另一个select是保存预先准备好的数据。 MS恳求我们通过调用HidD_FreePreparsedData()来释放它。 如果我们不这样怎么办?

我想到的最后一件事是加速SetupDiGetClassDevs()。 我目前的用法是:

HDEVINFO hardwareDeviceInfo = SetupDiGetClassDevs ( &HidGuid, NULL, // Define no enumerator (global) NULL, // Define no (DIGCF_PRESENT | // Only Devices present DIGCF_DEVICEINTERFACE)); // Function class devices. 

如果我改变参数,会加快吗?

完成设备后,只需将预先准备好的数据释放即可。 如果设备被移除,读取或写入将失败,您可以通过调用GetLastError()来查看错误代码,