使用.NET System.Threading.Thread类处理泄漏
-
04-10-2019 - |
题
我有一个问题,我的应用程序中的手柄数量正在不断增长。我进行了调试,并意识到这是由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将释放下一个集合上的手柄。
就您而言,该线程看起来不会完成。
不隶属于 StackOverflow