用.Net进行开发,遇到一个问题,有对象通过如下方式设为租约永不过期,public class class1 : MarshalByRefObject
{
   public override Object InitializeLifetimeService()
   {
      return null;
   }
}现在问题来了,因为对象具有无限长的生存期,不会被释放,造成内存占用很大,请教各位达人,
有没有方法释放这种无限生存期的对象?

解决方案 »

  1.   

    VirtualFileBase.InitializeLifetimeService 方法
    注意:此方法在 .NET Framework 2.0 版中是新增的。 通过禁止创建租约来给予 VirtualFileBase 实例无限的生存期。 
    返回值
    总是为 空引用(在 Visual Basic 中为 Nothing)。 
     备注 
    此方法重写其基类的 InitializeLifetimeService 方法。它始终返回 空引用(在 Visual Basic 中为 Nothing),从而禁止创建会限制虚拟文件或目录的生存期的租约。
      

  2.   

    http://www.cnblogs.com/wayfarer/archive/2004/08/05/30437.aspx
      

  3.   

    public class class1 : MarshalByRefObject,IDisposable
    {
    ....实现IDisposable接口...手动释放...
      

  4.   


    谢谢各位,之所以使用无限期的租约是因为客户端使用该对象的时候的释放时机不易把握,
    另外可能会有多个客户端使用该对象,且时间可能是不连续的,前一个客户使用完了过一段
    时间另外的客户端才会使用该对象。如果实现IDisposable借口,之前的代码
     public override Object InitializeLifetimeService() 
     { 
        return null; 
     }
    不会对其有所影响吧?
      

  5.   

    加一个属性
    public bool IsPermanent; 是否永久
    public override Object InitializeLifetimeService() 

       if(IsPermanent)return null; 
       else .....
      

  6.   


    谢谢,但是现在问题是怎么样把永久的对象释放掉
    也许正如dreamsnake 所说,设计思路有问题,但是对于永久租期对象的释放,是不是有办法呢
      

  7.   

    晕。你把IsPermanent设为false,它就不是永久对象了啊
    然后就不用你操心了。垃圾回收会自己释放
      

  8.   

    谢谢vosov,是不是这样,InitializeLifetimeService并不只是创建对象的时候有用,
    在创建对象的时候设为生命期是永久的,但在后面的使用中我发现对象需要被释放了,就把
    IsPermanent设为false,对象的生命期就由永久变成了可回收的呢?
    不知道你是不是这样的意思,请指教
      

  9.   

    看看微软任旻关于.net remoting的那个讲座把
    好像讲到了