2014-03-12 60 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。你從微芯片中獲得它,而內存泄漏問題已經解決。