1

我写了这段代码:

public class Message : MarshalByRefObject, IMessage
{
    ...

    public override object InitializeLifetimeService()
    {
        ILease leas = (ILease) base.InitializeLifetimeService();
        if (leas != null)
        {
            if(leas.CurrentState == LeaseState.Initial)
            {
                leas.InitialLeaseTime = TimeSpan.FromMilliseconds(2000);
                leas.SponsorshipTimeout = TimeSpan.Zero;
                leas.RenewOnCallTime = TimeSpan.Zero;
            }
        }
        return leas;
    }
}

InitializeLifetimeService 的覆盖是否在 2 秒后对象没有“收集垃圾”?我的意思是,不管这个实例是否被远程访问,都是独立的。

谢谢你。

4

1 回答 1

2

要确保对象租约结束,您只需将生命周期服务的轮询间隔设置为低于您设置为生命周期的 2 秒。

您可以在服务器对象的构造函数中执行此操作:

// just a sample value of 1 second
LifetimeServices.LeaseManagerPollTime = TimeSpan.FromSeconds(1); 

现在即使你在对象上调用方法,它仍然会被收集,因为你设置了:

leas.RenewOnCallTime = TimeSpan.Zero
于 2011-05-08T06:49:57.823 回答