Здравствуйте, Mab, Вы писали:
Mab>Итак, глобальная таблица косвенно держит делегат, который держит экземпляр Test.
Mab>Мораль: не пренебрегайте вызовом Dispose. Иначе некоторе финалайзеры у вас вызовутся лишь при app domain shutdown
Где то так я и думал.
MSDN говорит.
As long as you are using a Timer, you must keep a reference to it. As with any managed object, a Timer is subject to garbage collection when there are no references to it. The fact that a Timer is still active does not prevent it from being collected.
И если поправить код:
public Test()
{
// _timer = new Timer(new TimerCallback(TimerCallbackFunc), null, 0, 0);
Timer timer = new Timer(new TimerCallback(TimerCallbackFunc), null, 0, 0);
}
То после сборки мусора timer по идее должен собраться GC, но и после этого обьект продолжает жыть. То есть Timer в финализаторе не удаляет ссылку.Не хорошо.
Действительно, нужно звать Dispose всегда, иначе получим MemoryLeak на ровном месте.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>