我想追查一个更大的C#程序中产生多个线程的内存泄漏。在这个过程中,我创建了一个我用来测试一些基本事物的小程序,并且发现了一些我实际上不理解的行为。线程内存泄漏
class Program
{
static void test()
{
}
static void Main(string[] args)
{
while (true)
{
Thread test_thread = new Thread(() => test());
test_thread.Start();
Thread.Sleep(20);
}
}
}
运行这个程序,我发现程序的内存使用量稳步增加而不停止。在短短几分钟内,内存使用量超过了100MB,并持续攀升。如果我注释掉test_thread.Start()这一行,程序使用的内存最大值大约为几兆字节,并保持稳定。我也尝试使用GC.Collect()在while循环结束时强制垃圾收集,但它似乎没有做任何事情。
我认为一旦函数完成执行后允许GC拖动它,线程就会被解除引用,但这似乎并没有发生。我不应该在这里更深入地理解某些东西,我希望能够帮助我们解决这个问题。提前致谢!