2011-05-06 2 views
1

Я написал этот код:.NET Lifetime объекта Remoting

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 секунды объект не «мусор»? Я имею в виду, независимо от того, был ли этот экземпляр удален удален или нет.

спасибо.

+0

вы спрашиваете, не будет ли объект GC'd через 2 секунды? потому что код выглядит так, как вы ХОТИТЕ его собирать после этого. (событие, хотя вы не изменили 10-секундный опрос по умолчанию) – Menahem

+0

Да, я хочу, чтобы объект был собран через 2 секунды. Я реализую одноранговый симулятор одноранговой сети, и есть сообщение, циркулирующее между сверстниками. Я думал назначить тайм-аут, после которого объект будет собран. Я не знаю, это лучший способ сделать это, но я не вижу другого способа решить эту проблему. – aumanets

+0

Я хочу, чтобы объект был собран через 2 секунды, и я не хочу продлевать время жизни по вызову. Этот код гарантирует такое поведение? – aumanets

ответ

2

Чтобы убедиться, что аренда объекта заканчивается, вам нужно установить интервал опроса службы времени жизни на уровень ниже, чем 2 секунды, установленные вами как срок службы.

вы можете сделать это на сервере object`s конструктору:

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

теперь даже если вы звоните mehods на объекте, он все равно будет собираться, потому что вы установили:

leas.RenewOnCallTime = TimeSpan.Zero