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实例的所有引用就足够了。鉴于线程不再运行并且对它的所有引用都已删除,gargabe 收集器将在下一次收集时释放句柄。

在你的情况下,看起来线程永远不会完成。

于 2010-05-24T09:42:43.960 回答