2014-03-12 104 views
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; 
       }     
     } 
    } 
+1

显示一些代码,你是否处置所有非托管资源? – Peter

+0

是的,我已经释放非托管资源,同时获取USB数据。下面是我在while循环中检查USB连接的代码片段: – user3411023

+0

我在WM_DEVICECHANGE中检查了USB连接。之后当我没有检查连接的情况下读取数据时,我没有收到任何数据。为什么它需要重复检查连接? 在此先感谢 – user3411023

回答

0

最近微芯片发布新HID.dll。你从微芯片中获得它,而内存泄漏问题已经解决。