Frage

Wenn übergeben Sie ein Objekt, das erbt von MarshalByRefObject zu einem anderen AppDomain wird, nicht GC.Collect () durch die AppDomain induziert, die erstellt es das Objekt sammeln, vorausgesetzt, dass das Objekt nicht in jedem AppDomain durch die Zeit, GC wurzelt .Collect () aufgerufen?

[wenn ich sage, ich nicht verwurzelten ich keinen Entwickler geschriebenen Code Zugriff bedeutet es mehr.]

Es scheint, dass das Objekt nicht erfasst zu werden, sondern an die nächste Generation gefördert zu werden!

Aber wenn ich vorbei, das Objekt zu einem diff stoppen AppDomain, wird es wie erwartet gesammelt zu werden.

Ist dieses Verhalten von Entwurf? Wenn ja Gründe?

Danke Jungs,

P. S. Ich weiß GC.Collect () innerhalb Code aus vielen Gründen schlecht ist, ich versuche zu verstehen, wie GC am MBROs nehmen würde.

War es hilfreich?

Lösung

Wie Sie MBRO Objekte erwähnt sind schwer, den Überblick über die gc zu halten. So MS implementiert ihr Verhalten ein bisschen anders.
Diese Objekte haben zwei Eigenschaften: Ihre erste Lebenszeit (ich glaube, fünf Minuten) und eine RenewOnCallTime (zwei Minuten). Wenn ein MBRO Objekt erstellt wird, es hat seine anfängliche Lebensdauer. Sobald diese Zeit Null ist für gc markiert.
Jeder Anruf auf dem Objekt erlaubt das Objekt für RenewOnCallTime länger zu leben (wenn die Restlaufzeit ist weniger als die RenewOnCallTime).

Ein Beispiel (5 Minuten anfängliche Lebensdauer, nur 2 Minuten RenewOnCallTime):
Objekt erstellt: Lebenszeit beträgt fünf Minuten;
4 Minuten vergehen; Lebensdauer ist eine Minute;
Aufruf zum Objekt gemacht wird; Lebensdauer ist zwei Minuten;
2 Minuten vergehen;
Das Objekt ist für gc markiert, No Lebensdauer links;

Irgendwo auf MSDN gibt es einen großen Artikel über das (die ich jetzt nicht finden können: /)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top