卸载带有引用的应用程序域
我是使用应用程序域的新手,所以我正在边学习边使用。
我正在利用应用程序域来隔离我在运行时加载的插件实例。如果我从主应用程序域引用插件对象(在其自己的应用程序域中)并且卸载该插件应用程序域,它会完全卸载吗?
我的理解是,通过从主应用程序域引用插件实例,我实际上引用了透明代理,所以我实际上并没有直接引用该对象。因此,我相信没有问题,但我想确保我的理解是正确的。
I'm new to using appdomains, so I'm learning as I go.
I'm making use of appdomains to isolate plugin instances that I'm loading at runtime. If I am referencing a plugin object (in its own appdomain) from the main appdomain and I unload that plugin appdomain, will it fully unload?
My understanding is that by referencing the plugin instance from the main appdomain, I'm actually referencing a transparent proxy, so I'm not actually directly referencing the object. Due to this, I believe there isn't an issue, but I want to make sure my understanding is correct.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的理解是正确的:一个应用程序域中的对象无法真正引用另一个应用程序域中的对象,因此卸载应用程序域将真正释放该应用程序域中的所有对象(并且您的代理对象会变得过时)。
卸载仍然存在各种问题:如果当前在应用程序域中执行某些代码(例如本机代码),则卸载将失败并出现异常。因此,在尝试卸载 AppDomain 之前,您应该确保所有线程都已从 AppDomain 返回。
Your understanding is correct: objects in one appdomain cannot really reference objects in another appdomain, so unloading an appdomain will truly release all objects in that appdomain (and your proxy objects become stale).
There are still various problems with unload: if certain code is currently executing in the appdomain (e.g. native code), then Unload will fail with an exception. So you should make sure that all threads have returned out of the AppDomain before trying to unload it.