Ответы с форумов MSDN

.NET - Уничтожается ли объект таймера сборщиком мусора?

Date: 21.09.2018 15:52:49

Документация System.Timers.Timer, в отличие от System.Threading.Timer, не заявляет напрямую, что объект таймера подлежит уничтожению GC после освобождения всех пользовательских ссылок на него. Вы можете проверить это на практике с помощью такого кода:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleTest
{
    class Program
    {
        static void Test()
        {
            var timer1 = new System.Threading.Timer(
              _ => Console.WriteLine("System.Threading.Timer callback"),
              null,
              0,
              500);

            var timer2 = new System.Timers.Timer
            {
                Interval = 500,
                AutoReset = true
            };
            timer2.Elapsed += (_, __) => Console.WriteLine("System.Timers.Timer callback");
            timer2.Enabled = true;
        }

        static void Main(string[] args)
        {
            Test();

            System.Threading.Thread.Sleep(2000);            
            GC.Collect();
            Console.WriteLine("GC collected");

            Console.ReadKey();
        }
    }
}
Для .NET 4.5 тест показывает, что System.Threading.Timer уничтожается, а System.Timers.Timer - нет.


Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub