看下面的帖子:
http://community.csdn.net/Expert/topic/3221/3221261.xml?temp=.7634088

解决方案 »

  1.   

    感谢QQCHE79启发大大的。
    另有问题:时间租借机制是否一样用于你文章中由工厂创建的对象?
      

  2.   

    singlecall模式的远程对象不用时间租借机制,SINGLETON和客户激活要用时间租借机制?
    服务端用REMOTINGSERVICES。MARSHAL(REMOTEOBJECT)公布的远程对象是否类似于SINGALTON
    对象。是否也要用时间机制。
    你文章中工厂创建的远程对象如果用时间租借机制,那么是否是因为通过信道被反回了客户
    端的缘故,否则只创建不返回,那该对象将到期被回收?
      

  3.   

    SINGLECALL模式的远程对象是否在调用对象方法后被服务端内存管理回收,但不一定立即销毁?
    由于要在服务端管理创建的远程对象,必然我要有对他们的引用,租借时间到后,能否被回收?或者使远程对象实现IDISPOSE接口,手动调用对象的DISPOSE,是否能被内存管理回收并
    销毁。
      

  4.   

    >> 时间租借机制是否一样用于你文章中由工厂创建的对象?
    没错。所有的Remoting对象都受租借机制约束。>> singlecall模式的远程对象不用时间租借机制,SINGLETON和客户激活要用时间租借机制?
    模拟Singlecall其实根本不用MarshalByRef对象,每次用FactoryClass建立一个local对象,调用,然后销毁就行了。>> 你文章中工厂创建的远程对象如果用时间租借机制,那么是否是因为通过信道被反回了客户端的缘故,否则只创建不返回,那该对象将到期被回收?
    返回一个MarshalByRef对象到Client会导致.NET Remoting保留对象饮用,所以GC不起作用。只收到租借周期的限制。简单的说,租期以内对象受Remoting控制,之后会被GC回收。
      

  5.   

    昨天看了你的文章后回去做了些实验,感觉.net提供的几种服务端远程对象注册方式只是做了
    些封装后的不同表现。就象你文中提到的。其机制就象你文中的工厂类。现看见你的回答应证
    了,心中大快,再次特别感谢。
    再有我用了TRACESERVICE 跟踪服务。服务端MARSHAL个对象后,时间到后会自动调用DISCONNECT事件,并被GC回收。
    可如果我用SERVICES。DISCONNET(REMOTEOBJ),并把REMOTEOBJ = NULL,也等到时间到期,
    可却没被GC,还有哪在引用???
    在线等。
      

  6.   

    。NET 中 REMOTING 是如何检测到对象到期并消除引用的?我能调用相应的功能不?
      

  7.   

    http://dev.csdn.net/develop/article/14/article/14/14124.shtm
    http://dev.csdn.net/develop/article/14/article/14/article/14/14110.shtm
      

  8.   

    再有我用了TRACESERVICE 跟踪服务。服务端MARSHAL个对象后,时间到后会自动调用DISCONNECT事件,并被GC回收。
    可如果我用SERVICES。DISCONNET(REMOTEOBJ),并把REMOTEOBJ = NULL,也等到时间到期,
    可却没被GC,还有哪在引用???这个问题有误,实际上我在代码里有一处引用,我忘了取消。如何能访问到租约管理器,不是租约。
      

  9.   

    >> 如何能访问到租约管理器,不是租约。
    LeaseManager是一个internal class, 你拿不到: 
    namespace System.Runtime.Remoting.Lifetime {
        internal class LeaseManager
        ...
    }