GC收集绑定模式OneTime吗?

时间:2014-03-08 11:23:07

标签: c# wpf

我想知道Binding GC Binding ModeOneTime是否OneTime被释放/收集?

Binding只是将源的值预先设定为目标并且就是这样。就像它的名字所说,它只是有用的一次。因此,对我而言,Binding对象应该被抛弃是有道理的。

我不确定,我该怎么测试呢?

我之所以这样问的原因是我在OneTime模式后面的代码中保留null,我会避免所有这些方法,例如清除方法,清除绑定,将目标属性设置为{{1将Binding实例设置为null,将所有引用设置为null ...以及GC将“希望”自动收集它的所有内容。

有关此的任何经验吗?

1 个答案:

答案 0 :(得分:3)

  

OneTime只是强调源的价值来定位并且就是这样。就像它的名字所说,它只是有用的一次。因此,对我而言,Binding对象应该被丢弃是有意义的

如果更准确MSDN

  

仅当应用程序启动 or when the DataContext undergoes a change 时,OneTime才会更新目标属性。

这意味着当更改DataContext属性时也会发生变化。

OneTime模式针对那些未实现INotifyPropertyChanged接口且未更新时需要通知属性的属性。这样做也是为了防止在使用memory leaks时可能发生的 Binding

我认为垃圾收集器对此模式没有例外,因为如果他过早地从内存中删除它,请切换DataContext不要更新属性。

Some useful links

A memory leak may occur when you use data binding in Windows Presentation Foundation

Finding Memory Leaks in WPF-based applications

Can bindings create memory leaks in WPF?