垃圾收集器KeepAlive方法如何与计时器一起使用?

Nib*_*Pig 6 c# garbage-collection

我偶然发现了一些使用该GC.KeepAlive()方法的代码,我试图了解它是如何工作的.例如,在此代码中:

Timer timer = new System.Timers.Timer(5000);
timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
timer.Enabled = true;
GC.KeepAlive(timer);
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我的理解是创建了一个Timer对象,它产生一个每5秒运行一次的线程.接下来,运行GC线.然后该方法退出,在垃圾收集运行时销毁计时器.

KeepAlive只会在调用KeepAlive之前保持活动状态,它看起来对我来说大概是0.0000001秒并且它不会被破坏,因为它有一个本地引用(除非它正在破坏它,因为没有其他事情发生在计时器对象?)

无论哪种方式,当5000间隔被击中时,该方法将在很久以前结束,并且很可能计时器被破坏.那条线的目的是什么?

Ser*_*rvy 4

那么这条线的目的是什么?

没有什么。您不应该使用它,因为它没有任何帮助。该代码可能是由不太熟悉该类如何Timer工作的人编写的。

在内部,该类Timer将使用完全不同的方法来确保它不会在应该被垃圾收集之前被垃圾收集。有关详细信息,请参阅此问题。