一个物体如何检测它何时处理?

时间:2014-09-22 05:09:30

标签: c# .net wpf

我无法找到答案。

假设我创建了一个包含其他对象B,C等的对象A.

首先创建对象A并将其添加到可观察集合中。稍后的对象A将从Observable集合中删除。 ObservableCollection持有对象A的唯一引用。

对象A是否可以检测到它会被销毁,以便对象A可以手动调用B.dispose和C.dispose并防止内存泄漏?

这是在.Net 4.0中,但是对象B和C是.Net 3.5或com对象,我不确定在处理A时它们会自动处理。 (我可能错了)。

提前致谢。

3 个答案:

答案 0 :(得分:3)

是。当一个对象不再可访问时,它就有资格进行垃圾回收。如果它是它引用的对象的唯一根,它们也有资格进行收集。如果它有终结器,GC将调用此终结器。关于对象的确定性和非确定性处理,有许多方面需要理解。它的引用可以在它之前完成,反之亦然。从这里开始:

答案 1 :(得分:1)

您可以在这种情况下使用Dispose Pattern。我不确定这是否可以帮助你。但如果您是Object B& S的所有者C然后你可以在B& S中实现配置模式。 C使A在完成时可以调用b.dispose / c.dispose。

答案 2 :(得分:0)

我会在对象A上实现Dispose,并确保从集合中删除它时调用它。它是一个可观察的集合,因此您应该能够获得一个对象来订阅该集合,并对从实现IDispose的集合中删除的对象调用dispose。

Dispose Pattern调用只是作为故障保护程序在Finalizer中进行处理,它并不是确保正确处理对象的主要方法,理想情况下,一旦不再需要对象,就应该调用Dispose