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