1
我開發了一個程序來讀取具有指定產品ID和供應商ID(pid和vid)的寫入HID設備。這是library:如何通過C#中的程序釋放未使用的佔用內存
除了一個問題,它的工作完美。在計時器刻度事件中,我正在檢查設備是否連接。計時器滴答持續時間是1000毫秒。該代碼是下面:
if (_connectionTester.IsDeviceConnected())
{
connectionStatusPictureBox.Image = Globals.Resources.GreenCircleImage;
HIDGlobals.Connected = true;
}
else
{
connectionStatusPictureBox.Image = Globals.Resources.RedCircleImage;
HIDGlobals.Connected = false;
}
和IsDeviceConnected
功能是:
public bool IsDeviceConnected()
{
return _usb.getDeviceList()
.Any(d => d.Contains(HIDGlobals.VID + "&" + HIDGlobals.PID));
}
的問題是隨着時間的流逝這增加了存儲器的使用。當我第一次啓動軟件時,內存使用量爲33.6 MB(在任務管理器內存列中)。 10分鐘後,它變爲38.7 MB。 5-6小時後它變成GB。
這是一個將運行8-9小時的應用程序。有什麼方法可以釋放內存嗎?我曾嘗試垃圾收集器GC.Collect()
。
但它沒有幫助。任何人都可以在這方面幫助嗎?
在此先感謝。
內存使用增長到GB的範圍似乎表明有泄漏的地方,所以這就是你需要確定和地址 – 2014-12-03 15:34:25
通常GC利用未使用的內存非常好的東西。您提供的代碼不足以推斷內存泄漏的位置。你必須使用一些內存分析器來定位它。 – 2014-12-03 15:38:57
它可能是需要處理的'GetDeviceList'的結果嗎? – ppetrov 2014-12-03 15:39:06