2010-10-18 19 views
4

Lorsque vous passez un objet qui hérite de MarshalByRefObject à un AppDomain différent, GC.Collect() induit par l'AppDomain qui l'a créé ne collecte pas l'objet, à condition que l'objet ne soit pas ancré dans soit AppDomain au moment GC.Collect() appelé?Garbage collecter des objets traversant la frontière AppDomain

[Quand je dis que je veux dire ne s'enracine pas d'accès du code écrit de développeur plus.]

Il semble que l'objet ne se recueillir, mais plutôt se promu à la prochaine génération! Mais si j'arrête de passer l'objet à un diff AppDomain, il est collecté comme prévu.

Est-ce que ce comportement est voulu? Si oui, pourquoi?

Merci les gars,

P.S. Je sais que GC.Collect() dans le code est mauvais pour beaucoup de raisons, j'essaye juste de comprendre comment GC aurait lieu sur MBROs.

Répondre

2

Comme vous l'avez mentionné, les objets MBRO sont difficiles à suivre pour le gc. MS a donc mis en place un comportement un peu différent.
Ces objets ont deux propriétés: Leur durée de vie initiale (je pense cinq minutes) et un RenewOnCallTime (deux minutes). Si un objet MBRO est créé, il a sa durée de vie initiale. Une fois que cette heure est zéro, elle est marquée pour gc.
Chaque appel sur l'objet permet à l'objet de vivre plus longtemps pour RenewOnCallTime (si la durée de vie restante est inférieure à RenewOnCallTime).

Pour un exemple (5 minutes à vie initiale, 2 minutes RenewOnCallTime):
objet est créé: Durée de vie est de cinq minutes;
4 minutes passent; La durée de vie est d'une minute.
L'appel à l'objet est fait; La durée de vie est de deux minutes.
2 minutes passent;
L'objet est marqué pour gc, No Lifetime left;

Quelque part sur MSDN il y a un article à ce sujet (que je ne trouve pas en ce moment: /)

+0

FGE, merci! OK, on ​​dirait que même si nous laissons tomber les références au MBROs, l'exécution continue à se maintenir sur les objets via les services de gestion de bail et de durée de vie. Je vais en lire plus sur ces domaines. – RanC

+0

Ce lien peut-être? http://msdn.microsoft.com/en-us/library/23bk23zc(v=vs.85).aspx – Spook