Question

J'ai un problème que le nombre de poignées dans mon application est en croissance continue. Je l'ai fait la mise au point et reconnaître que cela est causé par classe System.Threading.Thread qui est utilisé pour une routine. Pour simplifier le débogage, j'ai créé un exemple d'application .NET:

    ...

    private void button1_Click(object sender, EventArgs e)
    {
        Thread t = new Thread(DoWork);
        t.Start();
    }

    public void DoWork(object parameter)
    {
        // Do something...
    }

    ...

Chaque fois que je suis en cliquant sur le bouton, un fil est créé en utilisant la classe System.Threading.Thread. Le problème est que ressemble le fil ne pas Libère Poignées parce que chaque clic cause de nombre de poignées de plus en plus par ~ 5.

La question est: comment puis-je libérer manuellement toutes les poignées créées par classe System.Threading.Thread

Merci à l'avance.

Était-ce utile?

La solution

Il est ne fuit pas réellement les poignées, il est juste que le GC n'a pas encore les collectionnait. Essayez de changer le code dans le gestionnaire de bouton pour que les boucles et crée 500 fils ou quelque chose et essayez pressant plusieurs fois et vous verrez probablement des poignées collectées.

Autres conseils

Vous n'avez pas besoin de libérer manuellement vos poignées de fil, laissant tomber simplement toutes les références à votre instance de Thread devrait suffire. Étant donné que le fil est plus en cours d'exécution et toutes les références à celui-ci sont enlevés, le collecteur de gargabe libérera les poignées de la prochaine collection.

Dans votre cas, il ne ressemble pas à le fil ne sera jamais fini.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top