我有一个问题,我的应用程序中的手柄数量正在不断增长。我进行了调试,并意识到这是由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类创建的所有手柄?

提前致谢。

有帮助吗?

解决方案

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

其他提示

您无需手动释放线程手柄,只需将所有引用放在您的 Thread 实例应该足够。鉴于该线程不再运行,并且所有对其的引用都被删除,因此Gargabe Collector将释放下一个集合上的手柄。

就您而言,该线程看起来不会完成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top