我有一個標準的CRUD應用程序,可以處理大量的數據。不同的窗口使用Linq-To-SQL訪問不同的表格,並且每個窗口基本上都有一個網格,單元格綁定到我正在顯示的對象上。爲什麼我的窗戶沒有被垃圾收集?
這裏發生的事情的一個非常標準的用例:
- 打開窗口一
- 關閉窗口A - 窗口A現在仍然在內存中,但不再可見。
- 打開窗口B
- 關閉窗口B - Windows A和B現在都在內存中,都不可見。
- 打開窗口C
- 當窗口C的數據被檢索時,窗口A的資源被釋放。
因此,在任何給定的時間,我有2-3個窗口在內存中,當我真正擁有的只有一個。我甚至爲這些窗口的關閉事件添加了處理代碼,這些窗口將所有我能想到的引用設置爲null。
我試過使用ANTS內存分析器,並且我注意到每個窗口都設置爲GC根。有沒有辦法禁用這種行爲或以某種方式強制GC從這些窗口收集?
謝謝!
PS:我檢查了this link並且它沒有解決問題。
編輯:問題是,用戶正在獲取System.OutOfMemoryExceptions。
「通常GC有他自己的生活。「 - 即使當我調用GC.Collect()時,它也不會釋放資源,就好像某些東西正在持有這些資源,但我不知道可以做什麼,我沒有任何靜態引用這些應該收集的對象 - 我已經用探查器驗證了這一點,我假設這個問題與每個窗口都是GC根有關,但我不知道該怎麼做,因爲它似乎內置於WPF – Jake 2011-01-25 02:19:38