如何检测没有appdomain代理对象离开
Posted
技术标签:
【中文标题】如何检测没有appdomain代理对象离开【英文标题】:How to detect that there are no appdomain proxy objects left 【发布时间】:2009-11-06 03:04:27 【问题描述】:我有一个系统,它将程序集加载到 appdomain 中,然后将对象代理分发给其他域(基本上是一个简单的 IoC 容器)。我们需要实现非常长的正常运行时间,并且能够在运行时更新实现对此有很大帮助。
我对此没有任何问题,因为我可以启动一个新的应用程序域,将新程序集加载到该应用程序域中,并开始将代理分发给漂亮的新对象,同时当前执行的代码与旧对象继续。一切都很好,除了在某些时候我想卸载旧的 appdomain。
有没有办法检查指向特定 appdomain 中对象的所有代理是否都超出了范围,以便我可以安全地调用 unload 而不会杀死任何长时间运行的进程?
【问题讨论】:
【参考方案1】:如果代理是双向的,最简单的方法是提供者 appdomain 在代理上调用一个方法来确定它是否仍然处于活动状态/活动状态。应用程序域边界的生命周期管理不是一个简单的问题,主要问题是您不能保证消费者应用程序域将正常运行(例如,参考计数并不是一个真正的好方法,尽管最明显。)
但是,如果所有代理都存在于同一个进程中,您实际上可以依赖 GC 执行正确的终结,因此,您可以实现代理,以便代理实例上的 Finalize() 将“电话回家”到提供程序 appdomain 以让提供者知道代理不再存在。
【讨论】:
嗨,Shaun,我一直在考虑这些,但仍然没有我想要的温暖自信的感觉。有一种感觉,我可能会等待一个非常不优雅的一周,然后丢弃旧的解决方案..以上是关于如何检测没有appdomain代理对象离开的主要内容,如果未能解决你的问题,请参考以下文章
Android - 检测用户已离开网络无线范围并关闭 WiFi