Nous avons une classe d'événement qui a une référence d'une classe msgCorps:Comment indiquer au GC de nettoyer également un objet incorporé?
public class StatusEvent
{
MsgBody msgBody;
public StatusEvent(MsgBody body)
{
msgBody = body;
}
....
}
public class MsgBody
{
string s1;
string s2;
.....
}
MsgBody
classe est utilisé uniquement par StatusEvent
. Aucun autre endroit MsgBody
n'est référé. Lorsqu'une instance StatusEvent
est créée, une instance MsgBody
sera créée. Lorsqu'un objet StatusEvent
est prêt pour le nettoyage, un objet MsgBody
peut être nettoyé en toute sécurité.
Mais le résultat est le nettoyage MsgBody
est loin derrière le StatusEvent
. D'un résultat de profileur, j'ai trouvé qu'il n'y avait que 43 instances Live de StatusEvent
mais il y avait 9 940 instances de MsgBody
!
Existe-t-il un moyen de les lier ensemble et de rendre GC
le nettoyage MsgBody
lorsqu'il supprime StatusEvent
?
grâce,
Si ce que vous dites est vrai, alors lorsque 'StatusEvent' est collecté, l'instance' MsgBody' devrait être éligible pour le garbage collection. Y a-t-il des événements ou des délégués de rappel utilisés (ils contiennent aussi des références)? Je vois qu'il est passé dans le constructeur donc il est créé en dehors de la classe 'StatusEvent' => il y a peut-être un champ contenant la référence en dehors de la classe. –