.NET Remoting объект Lifetime - PullRequest
1 голос
/ 06 мая 2011

Я написал этот код:

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

Спасибо.

1 Ответ

2 голосов
/ 08 мая 2011

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

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

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

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

leas.RenewOnCallTime = TimeSpan.Zero
...