.NET Remoting的租期管理器

异常描述

最近参与的项目中使用了AppDomain,AppDomain是一组程序集的逻辑容器,详细的介绍可以读这篇文章:
AppDomain

其中碰到一个bug,一个AppDomain对象被创建并使用5分钟后,整个程序崩溃了。

相关代码片段

.NET Remoting的租期管理器_第1张图片

PluginLoader中:
.NET Remoting的租期管理器_第2张图片
PluginHost中:
这里写图片描述
.NET Remoting的租期管理器_第3张图片

原因:

CLR为跨APPDomain访问的对象代理使用了一个“租约管理器”。一个对象的代理创建好之后,CLR保持对象存活5分钟。如果5分钟之内没有通过代理发出调用,对象就会失败,下次垃圾回收会释放它的对象。每发出一次对象的调用,“租约管理器”都会续订对象的租期,保证它在接下去的2分钟内在内存中保持存活。如果在对象过期之后试图通过一个代理调用它,CLR会抛出一个RemotingException。

默认的5分钟和2分钟的租期设定可以修改的,你只需要重写MarshalByRefObject的虚方法InitializeLifetimeServices即可。

解决方案:

.NET Remoting的租期管理器_第4张图片

你可能感兴趣的:(.NET开发,AppDomain,Remoting,CLR,C#)