2011-05-06 5 views
1

가이 코드 작성 :.NET 원격 개체의 수명

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의 피부의 재정? 이 인스턴스가 원격으로 액세스되었는지 여부에 관계없이 독립적으로 말합니다.

감사합니다.

+0

2 초 후에 물체가 GC되지 않을 것인지 묻는가? 그 코드는 그 후에 수집되기를 원하는 것처럼 보입니다. (비록 당신이 10 초 폴링을 바꾸지는 않았지만 이벤트) – Menahem

+0

예, 2 초 후에 오브젝트를 수집하고 싶습니다. 필자는 피어 2 피어 시뮬레이터를 구현 중이며 피어간에 순환되는 메시지가 있습니다. 개체를 수집 한 후 시간 초과를 할당하려고했습니다. 이것이 최선의 방법인지 나는 모른다. 그러나 이것을 해결할 또 다른 방법은 없다. – aumanets

+0

2 초 후에 물체를 수집하고 싶습니다. 전화를 걸면 수명 시간을 갱신하고 싶지 않습니다. 그 코드가 그 행동을 보장합니까? – aumanets

답변

2

개체 임대가 종료되도록하려면 수명 시간 서비스의 폴링 간격을 수명으로 설정 한 2 초보다 낮은 값으로 설정하면됩니다. 서버 object`s 생성자에서이 작업을 수행 할 수 있습니다

: 지금 당신이 개체에 mehods를 호출 할 경우에도

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

는 은 여전히 ​​수집됩니다

, 당신은 설정 때문에 :

leas.RenewOnCallTime = TimeSpan.Zero