Вопрос

Когда вы проходите объект, наследующий от MarshalbyRyFObject к другому AppDomain, не будет gc.collect (), индуцируемый appdomain, который создал его, сочетает объект, при условии, что объект не укоренен в Appdomain к времени gc.collect ( ) называется?

Когда я говорю, не укоренился, я имею в виду, что разрабатыватель написал код не доступа к нему.

Похоже, что объект не собирается, а скорее продвигается к следующему поколению!

Но если я перестану пропустить объект к развлечению Appdomain, он собирается, как ожидалось.

Это поведение по дизайну? Если так обоснование?

Спасибо, парни,

PS Я знаю gc.collect () в коде плохое по многим причинам, я просто пытаюсь понять, как GC будет проходить на MBROS.

Это было полезно?

Решение

Как вы упомянули объекты MBRO, трудно отслеживать для GC. Итак, MS внедрил их поведение немного по-другому.
Эти объекты имеют два свойства: их первоначальный срок службы (я думаю, что пять минут) и обновленное время (две минуты). Если объект MBRO создан, он имеет первоначальный срок службы. Как только на этот раз равен нулю, он помечен для GC.
Каждый вызов на объект позволяет объекту дольше жить для RenewonCalltime (если оставшееся время жизни меньше, чем retewoncallTimeTime).

Для примера (5 минут начальный срок службы, 2 минуты RenewoncallTime):
Объект создан: срок службы составляет пять минут;
4 минуты пропускания; Срок службы составляет одну минуту;
Вызов на объект сделан; Срок службы - две минуты;
2 минуты пропускания;
Объект помечен для GC, без оставшегося жизни;

Где-то на MSDN есть отличная статья об этом (которую я не могу найти прямо сейчас: /)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top