我正在使用Microsoft.Practices.Unity框架1.2,我可以看到隨着時間的推移內存使用量急劇增加。我一直在觀察第0,1和2代的垃圾收集器堆大小,並且對象似乎不斷被提升到第2代,他們在那裏停留,變得越來越老,沒有被GC聲稱。Unity Framework內存問題
我可以做些什麼調整來避免這種過多的內存消耗?
我正在使用Microsoft.Practices.Unity框架1.2,我可以看到隨着時間的推移內存使用量急劇增加。我一直在觀察第0,1和2代的垃圾收集器堆大小,並且對象似乎不斷被提升到第2代,他們在那裏停留,變得越來越老,沒有被GC聲稱。Unity Framework內存問題
我可以做些什麼調整來避免這種過多的內存消耗?
你怎麼知道這是由於統一框架?有可能你的注入實例沒有正確處置。我建議RedGate內存分析器,因爲它會告訴你什麼沒有被收集。內存泄露是一種PITA,過去兩週我一直在與他們打交道。
事件處理程序通常是這些類型問題的原因。確保您手動刪除所有事件處理程序。
我發現GC並不像您想象的那樣清理垃圾。
如果對象正在遷移到第2代,那意味着它們仍然存在。確保您的課程實施了IDisposable
,並且他們對其所包含的任何參考文獻調用Dispose()
。自動執行此操作的一種方法(如果您使用的是C#)將在using
塊中包裝引用。引用將在塊的結尾自動處理。
你說得對。看起來這不是一個統一問題。事實上,我將進行更多的測試,以確認此行爲對於所有其他.NET應用程序都是如此。 Gen 2對象很少被GC聲明。感謝您的答覆。 – Jazz 2011-01-22 23:02:51
我們最近在實體框架中發現了內存泄漏(實體連接沒有釋放對象上下文),您使用的是EF4嗎? – TMN 2011-01-24 18:27:36