Microsoft
Net Remoting 系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务 我写的
Net Remoting系列专题: Microsoft
Net Remoting系列专题之一:
Net Remoting基础篇 Microsoft
Net Remoting系列专题之三:Remoting事件处理全接触 Microsoft
Net Remoting 系列专题之二 一、远程对象的激活 在 Remoting 中有三种激活方式,一般的实现是通过 RemotingServices 类的静态方法来完成
工作过程事实上是将该远程对象注册到通道中
由于 Remoting 没有提供与之对应的Unregister 方法来注销远程对象,所以如果需要注册/注销指定对象,微软推荐使用 Marshal(一般译为编组)和 Disconnect 配对使用
在《Net Remoting 基础篇》中我已经谈到:Marshal()方法是将 MarshalByRefObject 类对象转化为 ObjRef 类对象,这个对象是存储生成代理以与远程对象通讯所需的所有相关信息
这样就可以将该实例序列化以便在应用程序域之间以及通过网络进行传输,客户端就可以调用了
而 Disconnect()方法则将具体的实例对象从通道中断开
根据上述说明,Marshal()方法对远程对象以引用方式进行编组(Marshal-by-Reference,MBR),并将对象的代理信息放到通道中
客户端可以通过 Activator
GetObject()来获取
如果用户要注销该对象,则通过调用 Disconnect()方法
那么这种方式对于编组的远程对象是否存在生命周期的管理呢
这就是本文所要描述的问题
二、生命周期 在 CLR 中,框架提供了 GC(垃圾回收器)来管理内存中对象的生命周期