Re[2]: Не понимаю поведение GC
От: FlyDN  
Дата: 07.11.05 23:06
Оценка:
Здравствуйте, 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.