防止对象被垃圾收集
Prevent object from getting garbage collected
在控制台应用程序中,我有以下代码:
private static System.Timers.Timer TaskTimer;
static void Main(string[] args)
{
//run each minute
Func<double> getNextMinute = () => { return (DateTime.Now.RoundUp(TimeSpan.FromMinutes(1)) - DateTime.Now).TotalMilliseconds; };
TaskTimer = new System.Timers.Timer(getNextMinute());
TaskTimer.AutoReset = false;
TaskTimer.Elapsed += (sender, e) =>
{
TaskTimer.Interval = getNextMinute();
TaskTimerCallback();
};
TaskTimer.Start();
bool exit = false;
while (!exit)
{
exit = (command == "exit");
}
}
如果我检查计时器 GC 生成,它始终为 0。
TaskTimerObject 是否有可能在滴答前收集垃圾?
不,GC 不会收集 TaskTimerObject。
字段 TaskTimer 是一个 Root Referance,它指向 TaskTimerObject。
在控制台应用程序中,我有以下代码:
private static System.Timers.Timer TaskTimer;
static void Main(string[] args)
{
//run each minute
Func<double> getNextMinute = () => { return (DateTime.Now.RoundUp(TimeSpan.FromMinutes(1)) - DateTime.Now).TotalMilliseconds; };
TaskTimer = new System.Timers.Timer(getNextMinute());
TaskTimer.AutoReset = false;
TaskTimer.Elapsed += (sender, e) =>
{
TaskTimer.Interval = getNextMinute();
TaskTimerCallback();
};
TaskTimer.Start();
bool exit = false;
while (!exit)
{
exit = (command == "exit");
}
}
如果我检查计时器 GC 生成,它始终为 0。
TaskTimerObject 是否有可能在滴答前收集垃圾?
不,GC 不会收集 TaskTimerObject。
字段 TaskTimer 是一个 Root Referance,它指向 TaskTimerObject。