0
我使用PIC18F26J50开发了系统。我使用Microchip的“通用HID-HID DLL库”编写了一个PC程序进行通信。我使用USBREADREPORT方法连续读取字节数据。该程序工作约2小时,然后性能下降。我正在使用Windows任务管理器查看并发现Handle计数持续增加并且时间增加。这表明内存泄漏。我认为我的程序中有一个错误,但我隔离了这个问题,并且喜欢HID class.dll中的内存泄漏。
有没有解决这个问题的解决方案?HID class.dll中的USB - PC内存泄漏
预先感谢任何帮助
while (true)
{
lock (this)
{
unsafe
{
if ((PerformUsBdataRead()) && (InputPacketBuffer[0] != Nodata))
{
//handle stylus events same as mouse events
}
}
}
}
//perform USB Read
private static bool PerformUsBdataRead()
{
unsafe
{
IntPtr unmanagedPointer = Marshal.AllocHGlobal(65);
InputPacketBuffer[0] = 0;
byte* inputPacketBufferPointer = (byte*)unmanagedPointer.ToPointer();
if (HIDClass.MCHPHIDClass.USBHIDReadReport(inputPacketBufferPointer))
{
unmanagedPointer = (IntPtr)inputPacketBufferPointer;
Marshal.Copy(unmanagedPointer, InputPacketBuffer, 0, 65);
Marshal.FreeHGlobal(unmanagedPointer);
return true;
}
else
{
Marshal.FreeHGlobal(unmanagedPointer);
return false;
}
}
}
显示一些代码,你是否处置所有非托管资源? – Peter
是的,我已经释放非托管资源,同时获取USB数据。下面是我在while循环中检查USB连接的代码片段: – user3411023
我在WM_DEVICECHANGE中检查了USB连接。之后当我没有检查连接的情况下读取数据时,我没有收到任何数据。为什么它需要重复检查连接? 在此先感谢 – user3411023