【问题标题】:Prevent object from getting garbage collected防止对象被垃圾收集
【发布时间】:2015-03-13 10:10:39
【问题描述】:

在控制台应用程序中,我有以下代码:

    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.KeepAlive
  • 不,因为它是static

标签: c# garbage-collection


【解决方案1】:

不,GC 不会收集 TaskTimerObject。

TaskTimer 字段是一个Root Referance,它指向TaskTimerObject。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多