引用类型的附加属性(DependencyProperty)何时释放?

3

假设我想创建一个附加属性,将对象引用列表附加到视图实例(DependencyObject / FrameworkElement)...

它何时释放所有这些引用?如果它们实现了Dispose,它会在附加属性值上调用Dispose吗?

2个回答

2
或许更容易理解的是,“引用”在实际中并没有被“释放”。它们只是变得不使用,不再能够通过任何全局空间或任何线程堆栈的引用链找到。然后它们就被认为是垃圾并且在某个时刻收集器会来回收它们所占用的内存。如果它们有最终器,则收集器将不会立即收集内存,而是将对象放在队列中,首先调用最终器。
FrameworkElement正在卸载时,它不应该对其值字典中持有的任何引用调用Dispose,原因有很多,主要是它不能知道自己是否有责任这样做。
想象一种情况,其他地方的代码创建了一个可处理对象,并将其附加到框架元素上。如果稍后该代码尝试使用该对象,结果发现框架元素已经将其处理掉了,那么会发生什么?
创建可处理对象的代码有责任确保在适当的时候对其进行处理。

0

将依赖属性视为DependencyObjects中的键值对。当您将值分配给附加的依赖属性(或常规依赖属性)时,该值会放入字典中。这意味着当视图本身被垃圾回收器回收时,列表中的项目也将被回收。Dispose行为也很正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接