2012-10-17 3 views
0

Bonne journée! J'utilise MSTest dans VS2010. Pourquoi les accesseurs ne sont-ils pas collectés après l'exécution du test? Voici mon code. C'est plutôt simple. Pour autant que je sache, les accesseurs utilisent PrivateObject comme un wrapper pour contenir un objet réel. Mais si je dispose et positionne l'objet sur null (checkProcess), efface la référence, de sorte que la seule référence provient de l'accesseur - pourquoi cela ne peut-il pas être collecté? Il contient l'objet réel, pas la copie de celui-ci.Test accessors garbage collection

Répondre

1

Vous n'annulez pas le champ checkProcess_Accessor dans votre classe, et tout ce à quoi il a un lien est encore en ligne et ne peut pas être collecté.

PrivateObject conserve évidemment une référence au processus checkProcess qu'il est en train de transmettre, et à son tour checkProcess_Accessor doit conserver une référence à PrivateObject. Vous pouvez toujours accéder à checkProcess via l'accesseur et PrivateObject (bien que vous puissiez avoir besoin d'utiliser la réflexion pour le faire si toutes les références sont privées), l'objet ne peut donc pas être collecté.

C'est une très mauvaise idée d'essayer de forcer le ramassage des ordures, mais je suis sûr que vous avez une raison valable de le faire.