2013-01-24 46 views
1

我已經創建了一個自定義的數據網格控件,它繼承自WPF中的wpf數據網格控件。處理WPF用戶控制和內存管理

因此,當用戶查詢數據庫時,幾百條記錄每個返回十五到二十列。

我相信當我控制屏幕時,所有分配給此屏幕及其網格的內存應由GC回收。但這種情況並非如此。

我在Red Gate的Memory Profiler中測試我的應用程序,它顯示當我打開屏幕30 MB分配給它的內存。

但是,當我關閉這個屏幕,應用程序莫名其妙地仍然持有該內存,當我在螞蟻內存分析器的原因,它顯示我的屏幕的實例仍然在內存中,因爲我的自定義數據網格。

我已經將卸載事件添加到我的用戶控件,並分離了在此過程中附加的所有事件處理程序。

我錯過了什麼,該怎麼辦?

回答

0

您不應該需要配置UserControl,而且您可能不應構建IDisposable UserControl。這是一種設計氣味。內存分析器可以告訴你爲什麼應用程序仍然適用於該內存,然後你必須修復該錯誤。

更新:

要找出誰是真正抱着螞蟻使用Instance Retention Graph功能,記憶。在.NET內存分析器(我更喜歡ANTS),它被稱爲Root Path

+0

是的,但我只想問我該怎麼做,以確保卸載我的用戶控制釋放它所持有的所有內存 – MegaMind

+1

你不能。如果不再需要,它會自動發佈。在你的情況下,它*仍然需要(即引用)的地方。你只能通過修復你在那裏的錯誤來做到這一點。你需要找出誰在記憶中,並試圖找到一種不會發生的方式。 – bitbonk