【问题标题】:Can binding ItemsControl to a non-ObservableCollection cause memory leaks?将 ItemsControl 绑定到非 ObservableCollection 会导致内存泄漏吗?
【发布时间】:2020-08-21 19:31:56
【问题描述】:

在研究 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)。

【问题讨论】:

  • 如果没有任何方法可以重现潜在问题,该声明当然没有任何意义。 IMO 你可以放心地忽略它。
  • @clemens 谢谢,很高兴听到这至少不是一般问题。我正在追踪一些内存问题,所以要少做一件事情。
  • 永远记住,互联网上有很多垃圾。有很多人觉得有必要向世界宣传他们的知识,但实际上他们并不比你我聪明。只是更健谈。
  • @Clemens 这就是我在这里问这个问题的原因:)

标签: wpf observablecollection inotifypropertychanged


【解决方案1】:

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

集合绑定泄漏

与 WPF 绑定泄漏类似的问题是 集合绑定泄漏。如果有绑定到一个集合 未实现 INotifyCollectionChanged 接口,WPF 创建一个 强烈参考这个集合。结果,它留在内存中 在整个应用程序生命周期内。

【讨论】:

    猜你喜欢
    • 2013-10-30
    • 2021-03-23
    • 2021-09-25
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2011-06-16
    相关资源
    最近更新 更多