【发布时间】:2010-02-22 13:13:42
【问题描述】:
考虑以下代码:
class TestTimerGC : Form
{
public TestTimerGC()
{
Button btnGC = new Button();
btnGC.Text = "GC";
btnGC.Click += (sender, e) => GC.Collect();
this.Controls.Add(btnGC);
System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer();
tmr.Interval = 1000;
tmr.Tick += (sender, e) => this.Text = DateTime.Now.ToString();
tmr.Start();
}
}
如果我没记错的话,tmr 变量超出范围后,Timer 不会在任何地方引用,因此它应该可以进行垃圾回收。但是当我点击GC按钮时,计时器继续运行,所以我猜它没有被收集......
有人对此有解释吗?
PS:这当然不是一个真正的程序,我只是想向某人证明一个观点……但我的证明没有用;)
【问题讨论】:
-
我假设这是一个 WinForms 计时器。
-
是的,我更新了代码以明确这一点
标签: c# .net garbage-collection timer