Домены приложений, время жизни

1,00
р.
Рихтер пишет, что так как у типов в другом домене нету корней, то в CLR пошли на хитрость: прокси объекты живут ~5 минут с момента последнего обращения, после чего умирают.
Получается, что эти объекты нужно постоянно "пинать", что бы CLR их не выгружал, а если выгрузил, то создавать по новой?

Ответ
5 минут — время жизни MarshalByRefObject по умолчанию (начальное, а не после последнего обращения). Его можно изменить установкой статического свойства LifetimeServices.LeaseTime в целевом домене:
public class MyObject : MarshalByRefObject { static MyObject() { TimeSpan t = TimeSpan.FromHours(24) LifetimeServices.LeaseTime = t } }
Но лучше, скорее всего, переопределить метод InitializeLifetimeService для конкретного объекта, который должен жить долго, чтобы он возвращал null:
[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.Infrastructure)] public override object InitializeLifetimeService() { return null }
Тогда для этого объекта не будет использоваться управление временем жизни и он умрет только с выгрузкой всего домена.