AppDomain中的对象获取垃圾

时间:2016-04-29 18:47:05

标签: c# garbage-collection appdomain

我正在尝试在C#中实现一个插件框架,其中每个插件都在自己的AppDomain中加载。我遇到的问题似乎是AppDomains之间的远程处理层是垃圾收集我的插件实例。每个插件都继承自这个类:

public class PluginRefObject : MarshalByRefObject{
    public override object InitializeLifetimeService() {
        return null;
    }
}

我认为这会给对象带来无限的生命。但是,插件似乎有点工作,然后突然我得到一个RemotingException,并显示错误消息:

Object 'longhexstring.rem' has been disconnected or does not exist at the server

其中,从谷歌搜索,我相信GC已经删除了我的远程对象。我是否必须做其他事情来保持这个物体的活力?

1 个答案:

答案 0 :(得分:0)

事实证明,我的插件中抛出了异常,导致AppDomain被卸载。

虽然这是一个棘手的错误。我的插件注册了一个TcpChannel,我希望TcpChannel通过ChannelServices.UnregisterChannel()断开连接。显然,运行该频道的线程仍在继续,并且在下次尝试访问该频道时异步抛出ObjectDisposedException

在谷歌搜索之后,似乎没有干净的方法来杀死TcpChannel,而我找到的用于清理另一个AppDomain中的频道的最佳解决方案就是卸载AppDomain