我有一個Silverlight 4應用程序,它有一個泄漏的ViewModel類。我通過在我的ViewModel類型上使用WinDbg和!gcroot命令來確認這一點。我無法準確地找到內存泄漏的確切原因,但試圖通過在相應的視圖下面一行代碼來解決它,當它被關閉:Silverlight 4內存泄漏
HtmlPage.Window.Navigate(new Uri(MyTopLevelUri));
這迫使應用程序重新啓動,因此RootVisual被重新初始化。現在,當我使用WinDbg時,我可以看到View關閉後沒有更多的引用保留在ViewModel類中。
但是,當我監視應用程序的內存使用(使用SysInternals)時,它不斷增加。有時它可能會略微下降,但如果我繼續打開和關閉嫌疑人視圖,我最終會得到超過1,000,000K的專用字節內存集。另外,即使我添加強制GC的代碼,它也不會真正恢復分配的所有內存。我應該擔心嗎?
SL4和控件是否存在固有內存泄漏?我沒有太多的信心,因爲最近發佈的補丁修復了DataTemplates(版本4.0.60129.0 http://timheuer.com/blog/)的內存泄漏。
對不起,它讓你難過。傑夫,我已經將它刪除了。 –
剛剛在這裏發現了一些非常有趣的東西:http://blogs.msdn.com/b/slperf/archive/2010/08/19/analyzing-silverlight-memory-usage-part-1-obtaining-measurements.aspx –
好的已經把它釘在一個特定的約束上。我們正在使用DataContextProxy模式(如下所述:http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in -nested-controls.aspx)。一旦我刪除使用DataContextProxy靜態資源的所有綁定,內存泄漏就會消失。我不知道爲什麼這會導致內存泄漏。 –