首页 > 解决方案 > 将 ItemsControl 绑定到非 ObservableCollection 会导致内存泄漏吗?

问题描述

在研究 WPF 应用程序中内存泄漏的潜在原因时,我遇到了这篇文章:

https://oz-code.com/blog/net-c-tips/top-3-memory-leak-inducing-pitfalls-of-wpf-programming

本文提出以下未经证实的声明(它承认)绑定到集合而不是ObservableCollection导致泄漏:

避免绑定到不是 ObservableCollection 的集合


我对这个的细节有点粗略。我还没有找到这个问题的根本原因,或者找到任何确凿的博客文章或 MSDN 文章,但仍然:在某些情况下,我发现当 ItemsControl 绑定到 ICollection 时发生内存泄漏'不是 ObservableCollection,将其更改为 ObservableCollection 解决了这个问题。

这是一个准确的说法吗?还是有其他更可能的解释?


我想知道所描述的 OP 是否可能是由绑定到未实现的对象引起的INotifyPropertyChanged?(https://stackoverflow.com/a/18543350/3195477)。

标签: wpfobservablecollectioninotifypropertychanged

解决方案


不完全是 OP 所要求的,但足够接近以提供帮助,我希望: https ://blog.jetbrains.com/dotnet/2014/09/04/fighting-common-wpf-memory-leaks-with-dotmemory/ states :

集合绑定泄漏

与 WPF 绑定泄漏类似的问题是集合绑定泄漏。如果绑定到未实现INotifyCollectionChanged接口的集合,WPF 将创建对该集合的强引用。因此,它在整个应用程序生命周期内都保留在内存中。


推荐阅读