垃圾收集器何时收集使用AppDomain.CreateInstance创建的实例?

时间:2014-08-06 01:35:38

标签: c# .net garbage-collection appdomain

在我的应用程序中,我创建了一个新的AppDomain。然后,我使用CreateInstanceAndUnwrap创建一个继承AppDomain中MarshalByRefObject的类型的实例,并将其分配给默认AppDomain中的变量。为了示例,我将调用对象" ObjectA"。

如果我错了,请纠正我,但如果我删除默认AppDomain和子AppDomain中对ObjectA的所有引用,我希望垃圾收集器收集ObjectA。但是,如果创建了ObjectA并且它会旋转一个永不退出的Thread或长时间运行的Task,我就不会期望垃圾收集器收集它。

有没有办法告诉垃圾收集器收集不同AppDomain中的对象?或者我被迫卸载AppDomain?

1 个答案:

答案 0 :(得分:1)

如果您正在运行一个引用该对象的线程,那么您在appdomain中留下了对该对象的一个​​引用,直到该线程退出,您将无法收集它。

我的建议是使对象实现IDisposable,并在调用它时取消长时间运行的任务/线程。