我有一個TabControl,它有兩個TabItems。這兩個TabItem中的每一個都有一個列表框。在SelectionChanged事件處理程序中,我將相應ListBox的ItemSource屬性設置爲null,並使用Collection填充另一個ListBox。現在,當我繼續選擇每個選項卡時,會出現內存尖峯。爲什麼是這樣?如果我們在WPF中將控件的ItemSource屬性設置爲null,是否會發生內存泄漏?
3
A
回答
1
嘗試不更換標籤時清空列表,我不認爲WPF會嘗試繪製列表,如果它沒有被顯示。當我需要做一個列表框/ ItemsControl的顯示對象的集合,我這樣做:
//have all the usual usings and
using System.ComponentModel
using System.Collections.ObjectModel
class Bar : INotifyPropertyChanged
{
//make your properties setters call PropertyChanged
}
class Bars : ObservableCollection<Bar>
{
}
然後設置列表框有ItemsSource
作爲你的Bars
實例,並使用數據模板來顯示每個Bar
。這意味着你不必再次設置ItemsSource
(因爲我猜測這是泄漏發生的地方,因爲ObservableCollection
會自動告訴列表框更新,以便更新某些內容)。通過不重複地更改ItemsSource
程序將可能效率更高,但這不是一個保證:)
如果你絕望,紅門做免費的.net reflector,所以你可以看看你的ListBox實際上在做什麼。
另一個問題可能是列表框沒有正確虛擬化,但我似乎記得列表框做了虛擬化,但您需要第二個選擇。
0
即使它不以這種方式出現,但TabControl只是一個普通的ItemsControl。 http://msdn.microsoft.com/en-us/library/system.windows.controls.tabcontrol.aspx
將所選項目設置爲選項卡可視化樹從其包含的內容完整構建。
如果您有凍結的頁面,請嘗試異步加載您的數據到Task Factory
。
也可能清除您的收藏,而不是將其設置爲空:)
相關問題
- 1. 我的屬性是否泄漏內存?
- 2. 新的Date()是否會在node.js中發生內存泄漏?
- 3. QMap是否會產生內存泄漏?
- 4. 設置UILabel.text屬性會導致線程中的內存泄漏
- 5. 內存泄漏 - 它們何時發生?
- 6. 將img.src設置爲dataUrl泄漏內存
- 7. IBOutlet,是否使用會員屬性?內存泄漏?
- 8. 內存泄漏會發生什麼?
- 9. pascal pl會發生內存泄漏嗎?
- 10. Javascript可能會發生內存泄漏
- 11. 在NSOperation中設置UIImage時發生內存泄漏
- 12. InputStream發生內存泄漏?
- 13. WPF內存泄漏
- 14. WPF內存泄漏
- 15. iPhone SDK:在分配屬性值時發生內存泄漏?
- 16. 如果在rootfs上發生內存泄漏,會發生什麼情況?
- 17. 這是否會導致內存泄漏?
- 18. fdopen()是否會導致內存泄漏?
- 19. 此代碼是否會泄漏內存?
- 20. 這是否會導致內存泄漏?
- 21. 這是否會造成內存泄漏?
- 22. 這是否會導致內存泄漏?
- 23. Application.terminate是否會導致內存泄漏?
- 24. JSONKit是否會造成內存泄漏?
- 25. 是否有內存泄漏,如果是的話,爲什麼?
- 26. 我的ThreadPoolExecutor是否泄漏內存?
- 27. 分配屬性時泄漏內存工具無法檢測到泄漏,因此泄漏是否存在?
- 28. 將memset向量設置爲0會導致內存泄漏嗎?
- 29. 如果在元素中設置WPF觸發器將不會設置屬性
- 30. 如果未調用clearTimeout(),flash.utils.setTimeout()是否會泄漏內存?
你確定它的列表框導致內存秒殺,而不是它自己的TabControl? WPF中的TabControls將僅保存當前選定選項卡的可視化樹。當您更改選定的選項卡時,TabControl將爲新選定的選項卡構建可視化樹,這會導致內存消耗(+ CPU)。 – ThomasAndersson 2010-10-21 11:33:37