我想追查一個更大的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拖動它,線程就會被解除引用,但這似乎並沒有發生。我不應該在這裏更深入地理解某些東西,我希望能夠幫助我們解決這個問題。提前致謝!