我想知道Binding
GC
Binding Mode
时OneTime
是否OneTime
被释放/收集?
Binding
只是将源的值预先设定为目标并且就是这样。就像它的名字所说,它只是有用的一次。因此,对我而言,Binding
对象应该被抛弃是有道理的。
我不确定,我该怎么测试呢?
我之所以这样问的原因是我在OneTime
模式后面的代码中保留null
,我会避免所有这些方法,例如清除方法,清除绑定,将目标属性设置为{{1将Binding
实例设置为null
,将所有引用设置为null
...以及GC将“希望”自动收集它的所有内容。
有关此的任何经验吗?
答案 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