我的问题是我的应用程序中的句柄数量不断增长。我做了调试并认识到这是由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类创建的所有句柄?
提前致谢。
答案 0 :(得分:3)
它是CLR中的一个错误
https://connect.microsoft.com/VisualStudio/feedback/details/430646/thread-handle-leak#tabs
答案 1 :(得分:1)
它实际上并没有泄漏手柄,只是GC还没有收集它们。尝试更改按钮处理程序中的代码,以便循环并创建500个线程或其他内容并尝试按几次,您可能会看到正在收集句柄。
答案 2 :(得分:1)
您无需手动释放线程句柄,只需删除对Thread
实例的所有引用即可。鉴于线程不再运行并且删除了对它的所有引用,gargabe收集器将释放下一个集合上的句柄。
在您的情况下,它看起来不会完成。