我的應用程序剛剛泄漏了1.5GB的內存。我想因爲我沒有大量可用的數據,所以我假設它泄露了內存,但它也可能只是保留在內存中。調試應用程序中的巨大內存泄漏
我正在使用perfmon來收集儘可能多的信息,以嘗試瞭解可能導致問題的原因。在這一點上我沒有太多的線索,並希望能從這裏的人那裏獲得更多的線索。
我可以說的第一件事是我沒有在我的任何類中實現IDisposable。但是,我知道我不會在任何GUI元素上調用Dispose,例如SolidColorBrush。由於我的應用不是以任何方式進行圖形密集處理,我認爲這不會導致問題。不過,我會添加必要的電話。
我不知道我是否在實現IDisposable的框架中使用任何其他類。我讀了一篇關於FxCop的帖子here on SO。我安裝並用它來分析我的程序集,但它似乎只檢查我自己的類是否正確實現了IDisposable。是否有另一個工具可以告訴我所有實現IDisposable的類?
我目前在我的應用程序中使用WF,並且WF正在不斷啓動和完成。 Perfmon顯示WF正在正常結束,並且我正在使用「使用」關鍵字,我知道這是爲我處理正確的處置。
有沒有簡單的方法來判斷內存是否「泄漏」來自非託管或託管代碼?
當我得到OOM異常時,該應用程序正在使用77k +手柄。
有關如何繼續下一步的任何提示將不勝感激。我打算再次運行該應用程序並監視性能計數器,並可能剔除某些調用。爲了比較的緣故,我也可以運行模擬,因爲在該模式下它不會調用我的C DLL。
我也剛剛安裝並運行了CLR Profiler,它似乎從未真正附加到我的過程。它啓動我的應用程序,但是「等待應用程序啓動公共語言運行時」的窗口永遠保留在屏幕上。當我關閉我的應用程序時,它仍然只是坐在那裏。所以,也許它終究不適用於.NET 3.5。 – Dave 2010-01-11 18:58:27
它適用於.NET 3.5。 – 2010-01-11 19:58:12
我之前也有過這個問題,我認爲修正是以管理員身份運行它。 – 2010-09-12 21:31:31