使用.NET System.Threading.Thread类处理泄漏

时间:2010-05-24 08:58:59

标签: .net multithreading handle-leak

我的问题是我的应用程序中的句柄数量不断增长。我做了调试并认识到这是由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类创建一个线程。 问题是看起来线程不会释放Handles,因为每次点击都会导致Handles数量增加~5。

问题是:如何手动释放System.Threading.Thread类创建的所有句柄?

提前致谢。

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

它实际上并没有泄漏手柄,只是GC还没有收集它们。尝试更改按钮处理程序中的代码,以便循环并创建500个线程或其他内容并尝试按几次,您可能会看到正在收集句柄。

答案 2 :(得分:1)

您无需手动释放线程句柄,只需删除对Thread实例的所有引用即可。鉴于线程不再运行并且删除了对它的所有引用,gargabe收集器将释放下一个集合上的句柄。

在您的情况下,它看起来不会完成。