0

アプリのハンドルの数が増え続けているという問題があります。私はデバッグを行い、これがいくつかのルーチンに使用されるSystem.Threading.Threadクラスによって引き起こされていることを認識しました。デバッグを簡素化するために、サンプルの.NETアプリケーションを作成しました。

    ...

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

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

    ...

ボタンをクリックするたびに、System.Threading.Threadクラスを使用してスレッドが作成されます。問題は、クリックするたびにハンドルの数が最大5増加するため、スレッドがハンドルを解放しないように見えることです。

問題は、System.Threading.Threadクラスによって作成されたすべてのハンドルを手動で解放するにはどうすればよいですか?

前もって感謝します。

4

3 に答える 3

3

CLRのバグです

https://connect.microsoft.com/VisualStudio/feedback/details/430646/thread-handle-leak#tabs

于 2010-09-10T11:48:49.157 に答える
1

実際にはハンドルがリークしているわけではなく、GC がまだそれらを収集していないだけです。ボタン ハンドラーのコードを変更して、ループして 500 スレッドか何かを作成し、数回押してみると、ハンドルが収集されていることがわかるでしょう。

于 2010-05-24T09:41:28.540 に答える
1

スレッド ハンドルを手動で解放する必要はありませんThread。インスタンスへの参照をすべて削除するだけで十分です。スレッドが実行されなくなり、スレッドへのすべての参照が削除されると、ガーガベ コレクターは次のコレクションでハンドルを解放します。

あなたの場合、スレッドが終了するようには見えません。

于 2010-05-24T09:42:43.960 に答える