生存期租约
引用封送对象 (MBR) 无论是服务器激活的 Singleton 对象还是客户端激活的对象,都不会永远驻留在内存中。租约是 .NET 远程处理系统开始执行删除某个特定对象并回收内存这一进程之前,该特定对象在内存中处于活动状态的时间。服务器应用程序域的租约管理器一个对象,它确定何时标记远程对象以进行垃圾回收。主办方是可以通过将其本身注册到租约管理器来为特定对象请求新租约的对象。
只要 MBR 对象在应用程序域之外进行远程处理,就将为该对象创建生存期租约。每个应用程序域都包含一个负责管理其域中的租约的租约管理器。租约管理器定期检查所有租约以确定过期的租约时间。如果租约已过期,租约管理器将遍历该对象主办方的列表,并查询是否有谁要续订租约。如果没有任何主办方续订该租约,租约管理器将移除该租约,该对象也会被删除,而垃圾回收机制将回收其内存。因此,如果对象被主办方多次续订租约或被客户端持续调用,其生存期可以比其生存期租约长得多。
由于远程对象的生存独立于其客户端的生存,因此简单或轻量对象的租约可以很长,被大量的客户端使用,并且被管理器或客户端定期续订。由于分布式垃圾回收所需的网络通信量很小,这种方法将高效地使用租约。但是,使用稀有资源的远程对象可以具有生存期较短的租约,而客户端会以非常短的时间段频繁续订该租约。当所有客户端都完成对远程对象的处理后,.NET 远程处理系统将很快删除该对象。这种策略增加了网络通信量以更有效地使用服务器资源。
使用租约管理远程对象的生存期是引用计数的一种替换方法,引用计数在不可靠的网络连接上可能是复杂而低效的。虽然可以将租约配置为延长远程对象的生存期以超过所需的精确长度,但是由于减少了专用于引用计数和进行 ping 操作的客户端的网络通信量,因而使租约在为特定方案正确配置时成为一种很有吸引力的解决方案。