2011-05-10 48 views
2

爲什麼Silverlight中的內存太多?Silverlight內存

數據:

我有位於用戶界面上許多複選框和其他人的時候。當然,我從視覺效果中移除了複選框和其他控件,但是Silverlight的內存使用總是增加的;它永遠不會減少。

如何確保內存被釋放?

這是垃圾回收問題嗎?如何找到所有剩餘對象的根目錄 沒有任何引用尚未收集?

如果需要,我可以提供更多數據。

+2

如何你創建並刪除這些控件? – 2011-05-10 20:13:04

回答

1

Silverlight使用的內存管理引擎與CLR用於WPF和其他傳統.NET應用程序的內存管理引擎類似。它基於垃圾收集,如果你保持對對象的引用,即使意外地阻止它們被垃圾回收,內存消耗也會繼續增加。

如果您的Silverlight應用程序中存在此問題,則可以查找泄漏,或嘗試使用工具查找泄漏並找到大部分內存正在分配的位置。可能最快的方法是使用內存分析器。不幸的是沒有很多與Silverlight的,但螞蟻探查,其中有一個免費試用版工作存儲器廓線儀,據說做:

+0

我已經使用螞蟻它顯示對象從來沒有收集,但這是幫助 – 2011-05-13 17:46:24

3

爲逃跑記憶中最常見的原因是不要將事件處理程序從已從對象樹中刪除的元素中分離出來。

東西往往回避注意到的是,實例級領域(包括實現事件代表)的應用對象和MainPage(或任何正在使用爲RootVisual)的不如static領域,因爲它們通常生活,只要作爲應用程序。

因此,一個無辜的看着: -

btn.Click += btn_myClickHandler; 
在主頁的代碼會導致內存泄漏

如果btn從用戶界面中刪除沒有相應的: -

btn.Click -= btn_myClickHandler; 
+0

哇,很好的建議。我必須說我沒有真正的內存問題,但這是我可能不會想到的,當我調試內存問題時。 – 2011-05-10 20:56:40

+0

這是偉大的建議。 – 2011-05-10 21:23:22

+0

我知道這一點..已經嘗試沒有任何幫助。存在其他一些參考 – 2011-05-13 17:46:56