4

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

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

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

谢谢你的帮助!

4

1 回答 1

2

Bea 表示,使用CollectionViewSource.GetDefaultView()是她最喜欢的访问给定集合视图的方式。此外,我个人从未遇到过使用的任何问题,CollectionViewSource.GetDefaultView()但是在给定的场景中它肯定是可能的。

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

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

经验证据表明,在集合超出范围之前,相关视图不会被 GC'ed;但是请记住,这是处理带有 implements 的集合INotifyCollectionChanged

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

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

于 2011-02-02T18:44:39.030 回答