Une fois que mon application a créé un thread à l'aide d'un délégué ParameterizedThreadStart
, ce thread effectue une initialisation et s'exécute jusqu'à la fin. Plus tard, je peux observer que ce thread n'est plus actif car sa propriété IsAlive
est false et la propriété ThreadState
est ThreadState.Stopped
.Nettoyage de thread géré C#
Une fois qu'un thread atteint cet état, il reste dans mon application, il existe toujours en tant qu'objets de threads jusqu'à ce que mon application s'arrête. Y a-t-il des mesures que je peux prendre pour les éliminer une fois qu'elles ne sont plus actives? Je voudrais supprimer l'objet et libérer toutes les ressources afin que les seuls objets threads que je possède soient des threads actifs. Thread n'implémente pas IDisposable, cependant, je ne suis pas sûr de la façon dont je devrais le faire.
Je pensais que cela pourrait être le cas, donc j'ai fait de mon mieux pour supprimer toutes les références à l'objet. En utilisant le débogueur VS, j'ai vérifié l'état de la thread périodiquement, et il est resté un objet thread valide. Je suppose que cela signifie que je suis toujours en train de le référencer quelque part? – Chris
Une fois le débogueur attaché, le GC ne touchera pas l'objet :( – Spence
Utilisez un PROFILER MEMORY pour vérifier les problèmes du GC N'utilisez JAMAIS un débogueur car il change le comportement du GC pour des raisons évidentes (par exemple, maintenir les variables plus actives – TomTom