【问题标题】:.NET Remoting object Lifetime.NET Remoting 对象生命周期
【发布时间】:2011-05-06 07:22:01
【问题描述】:

我写了这段代码:

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 秒后对象没有“垃圾收集”?我的意思是,不管这个实例是否被远程访问,都是独立的。

谢谢。

【问题讨论】:

  • 您是在问对象是否在 2 秒后不会被 GC 处理?因为代码看起来像你想在那之后收集它。 (尽管您没有更改 10 秒投票默认值的事件)
  • 是的,我希望在 2 秒后收集对象。我正在实现对等 2 对等模拟器,并且在对等之间有一条消息循环。我正在考虑分配超时,之后收集对象。我不知道这是否是最好的方法,但我没有看到解决这个问题的另一种方法。
  • 我希望在 2 秒后收集对象,并且我不想更新待命时间。该代码是否保证了该行为?

标签: .net object remoting .net-remoting lifetime


【解决方案1】:

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

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

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

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

leas.RenewOnCallTime = TimeSpan.Zero

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    相关资源
    最近更新 更多