tpo*_*pol 5 .net c# constructor garbage-collection
在下面的代码中,我在类的构造函数中创建一个DispatcherTimer.没有人继续参考它.
根据我的理解,在离开构造函数的范围之后,垃圾收集器应该在一段时间后回收计时器.但这不会发生!甚至在强制进行垃圾收集之后GC.Collect()
引擎盖下发生了什么?
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(100),
IsEnabled = true
}
.Tick += (s, e) =>
{
textBlock1.Text = DateTime.Now.ToString();
};
}
}
Run Code Online (Sandbox Code Playgroud)
当你仅仅构造 a 时DispatcherTimer,没有什么可以阻止它被 GC 。但是,您设置IsEnabled = true,这将调用Start()计时器。当这种情况发生时,这行代码将被执行:
this._dispatcher.AddTimer(this);
Run Code Online (Sandbox Code Playgroud)
现在它Dispatcher本身正在root计时器,这意味着它不能被GC。