2014-09-05 27 views
1

我有一個silverlight應用程序,當窗體打開時它使用近17mb但是當我關閉窗體時它釋放任何內存。我正在處理所有的變量和對象,但GC不會釋放任何東西。當關閉表單時,我也在運行時刪除了所有的控件。 當我與螞蟻內存分析器驗證。在那裏它顯示爲NativeObjectSafeHandle 196440,它是可以放置的最大的一個,第二大的是UnmanagedMemoryStream。如何釋放Silverlight控件在關閉窗體上使用的內存

在內存分析器中,它顯示了很多silverlight內部引用,iam不能像樣式,system.windows.controls和資源一樣處理它們。即使我清理form.resources.clear()。

請建議我釋放內存。

感謝 克里希納

+0

你怎麼稱呼GC.SuppressFinalize?任何非託管你打電話處置模式正確嗎?資源使用? NativeObjectSafeHandle是Microsoft.Internal命名空間中的.NET Framework內容,您不必擔心GC處理它。 更多關於這方面的更多信息關於分析silverlight中的內存http://blogs.msdn.com/b/slperf/archive/2010/08/19/analyzing-silverlight-memory-usage-part-1-obtaining -measurements.aspx – AllSpark 2014-09-09 10:56:46

+0

Yea ..i已經調用GC.SuppressFinalize。我們有一個內存泄漏問題。在開放的形式它使用近15 MB,並在關閉後釋放大約5至7 Mb。我已將所有對象置於Dispose方法中。 是否有可能釋放它在表單加載約15 Mb中使用的總內存。 ?? 如果它沒有釋放總內存,這是否意味着我們在應用程序中有內存泄漏? – Krishna 2014-09-14 15:21:19

+0

自從CLR處理這些東西以來,您幾乎從不必擔心.NET中託管內存的釋放問題。垃圾收集器在他想要的時候收集這些物體。終結者只需要非託管資源。換句話說,你不必擔心那些自CLR發佈以來就沒有發佈的內容。 我認爲以下視頻解釋這個過程中更好 (跳轉至0.45視頻) http://www.youtube.com/watch?v=MEVeurJtiW8 http://www.youtube.com/watch?v = cV8YJqc37ww – AllSpark 2014-09-23 00:13:14

回答

0

最好的做法是不強制在大多數情況下,垃圾收集。由於CLR知道處理它的最佳方法。但是,如果你真的想力垃圾收集嘗試GC.Collect的,這將迫使所有的代

http://msdn.microsoft.com/en-us/library/xe0c2357(v=vs.110).aspx

也請參閱我的意見提供了更好的解釋的鏈接,直接垃圾收集。

+0

我們如何識別內存從窗體釋放時關閉窗體? 我們可以在TaskManager中看到嗎? – Krishna 2014-10-06 13:08:14

+0

使用內存分析器,如螞蟻或CLRMemory分析器。它在我發送的視頻中描述。 – AllSpark 2014-10-08 11:28:43

+0

我使用的內存配置文件我放置了所有可以放置的變量和控件,但是在NativeObjectsSafeHandle中有一些對象,因爲所有內部.net引用(如system.windows.controls引用)都存在。我們可以處理.net引用還是有任何方法來刪除NativeObjectSafeHandle中的對象??? – Krishna 2014-10-31 06:04:10

相關問題