wpf - WPF 中的 CollectionViewSource.GetDefaultView() 内存泄漏?

标签 wpf memory-leaks collectionviewsource listcollectionview

我想知道在 WPF 中使用 CollectionViews 的最佳实践是什么,特别是使用 CollectionViewSource.GetDefaultView() 方法。有没有人在使用 GetDefaultView 时遇到过任何问题?我们担心它可能会导致一些内存泄漏。

手动创建 ListCollectionViews 而不是依赖 GetDefaultView() 通常是更好的做法吗?

WPF 如何管理这些 View ?当收集完成时,他们会得到 GC 吗?我看过一些文章说你需要从他们的源集合中分离 CollectionViews 否则你会有内存泄漏。

谢谢你的帮助!

最佳答案

Bea 指出,使用 CollectionViewSource.GetDefaultView()是她吗favorite way for accessing the view给定的集合。此外,我个人在使用 CollectionViewSource.GetDefaultView() 时从未遇到任何问题。但是,在给定的情况下肯定是可能的。

您必须了解每个集合都有一个默认 View ,并且当您将给定属性绑定(bind)到给定集合时,WPF 会自动用 View 包装集合并绑定(bind)到 View ;不是收藏。

由于这是 WPF 框架的一部分,因此您必须假设每个集合都有一个与之关联的 View ,然后在处置该集合时该 View 将被处置。如果通过可绑定(bind)属性引用了该集合,那么无论您是否调用 CollectionViewSource.GetDefaultView(),都会有一个关联的 View 引用该集合。或者不是这样你仍然会处于同样的困境中。

经验 evidence存在,直到集合超出范围,关联的 View 才会被 GC'ed;但是请记住,这是处理带有工具的集合 INotifyCollectionChanged .

根据您的情况,集合和关联 View 之间可能存在 1:1 关系,因此耦合可能不会提供任何障碍。在这种情况下,一旦集合超出范围,被 GC 处理的 View 不是问题。

它归结为谨慎行事,并确保您知道在更复杂的情况下发生了什么,以便您可以采取适当的措施。

关于wpf - WPF 中的 CollectionViewSource.GetDefaultView() 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833460/

相关文章:

c# - 在 WPF 应用程序中将数据从 C# 发送到 Javascript

c++ - 释放二维数组时不匹配的删除

c# - Windows phone 8.1 滤镜合集查看源码

wpf - 带有转换器的 SortDescription

wpf - 从 WPF 中的 ListBox 中删除项目?

c# - 如何使用 Syncfusion Metro Studio 生成的 XAML 字典

c# - 为什么 Rect.Intersect 会为两个不相交的矩形返回一个非空的 Rect?

Java:线程退出后未回收堆

javascript - 这段代码会产生内存泄漏吗?

wpf - CompositeCollection : why can't I bind against the data context of another control but have to use a CollectionViewSource? 的来源