2011-10-27 75 views
3

我有一個問題,看起來像我的一個應用程序中的內存泄漏(應用程序使用更多的內存隨着時間的推移,大約一週工作後掛起)。內存泄漏和弱引用

我檢測並修復了一些與我寫過的類有關的漏洞(比較sos.dll中的堆轉儲快速顯示它們),並且這些漏洞的數量不再增加。

目前,唯一一個隨時間而顯着增加的實例是WeakReference實例,它以每分鐘1000個新實例的穩定速率增長。

我的代碼不直接使用WeakReference,我從來沒有自己創建這些。

什麼可能導致如此多的WeakReference實例被創建?

我使用VB.NET,Visual Studio 2008和.NET 3.5

+1

您使用的是ORM嗎? (如Entity Framework,Linq-to-sql,NHibernate)是您的Web應用程序嗎? – xanatos

+2

您是否嘗試過使用Microsoft的[CLR分析器](http://www.microsoft.com/download/en/details.aspx?id=16273)查看引用中包含的內容? –

+0

我的應用程序是本地應用程序(通過串行端口或TCP套接字與其他設備通信)。我使用的唯一ORM是LINQ2SQL,這是一個不常用的輔助函數(除非用戶專門調用該功能,否則不會被調用)。如果您認爲可以,可以將ORM部分完全從應用程序中刪除以進行測試。 –

回答

8

是的,這是VB.NET組件相當臭名昭著的泄漏。它是由弱引用跟蹤用WithEvents關鍵字聲明的事件引起的。完成此跟蹤以支持編輯並繼續。它爲每個在類中聲明的WithEvents事件泄漏WeakReference的一個實例。調試器需要連接才能釋放這些WeakReference對象。

解決方法很簡單。發佈發佈版本,而不是調試版本。

+0

這個問題解決了嗎?另外,你能否提供一些進一步的細節,爲什麼會發生這種情況?我在谷歌搜索時發現的唯一有用的東西就是這個答案。 –