【问题标题】:Does this OneWay Binding leak memory?这个 OneWay Binding 是否泄漏内存?
【发布时间】:2016-09-20 11:08:38
【问题描述】:

我在 WPF 应用程序中使用 MVVM 模式,出于教育目的,我有一个关于内存泄漏的问题。

我一直在使用 Postsharp 库。

我的 ViewModel 如下所示:

public class MyViewModel : INotifyPropertyChanged
{
     private ClassA _myClassAField; //ClassA doesn't Implement INotifyPropertyChanged

     public MyViewModel(ClassA classAParameter)
     {
          _myClassAField = classAParameter;
     }

     [NotifyPropertyChanged]
     public string Name { get { return _myClassAField.Name; } }


     .....//Other Code.....    
}

Xaml:

<Textblock Text="{Binding Name, Mode=OneWay}"/>

问题:

这个绑定会泄漏内存吗? 在我的测试中它似乎没有泄漏,但我不明白为什么?

与 Property Name 的绑定只是 ClassA 中的一个 getter,它没有实现 INotifyPropertyChanged。

【问题讨论】:

  • 为什么会认为有内存泄漏?
  • ClassA 没有实现 INotifyPropertyChanged。而我的 get 属性返回 ClassA 对象的名称。或者用 NotifyPropertyChanged 标记的 Name 属性会覆盖它吗?

标签: c# wpf mvvm memory-leaks postsharp


【解决方案1】:

您的ClassA 没有实现INotifyPropertyChanged,但您绑定到MyViewModel 类中的一个属性,它实现了!因此,您不应该有内存泄漏。

供参考:https://blogs.msdn.microsoft.com/micmcd/2008/03/07/avoiding-a-wpf-memory-leak-with-databinding-black-magic/

存在 WPF 检查以查找实现的东西的问题 INotifyProperyChanged。如果有数据绑定到不 实现此接口,然后在全局表中创建记录。 该记录不会被清理,因为 WPF 无法检查何时 不再需要该数据库记录。

【讨论】:

  • 啊,我明白了!你链接的文章真的很有趣,对我来说很开放。一直在探索内存泄漏领域,想了解更多相关知识。
  • @J.Olsson,很高兴帮助老兄
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 2013-08-12
  • 2014-11-17
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多