Здравствуйте, FlyDN, Вы писали:
FDN>MSDN говорит.
Увы, но действительно говорит он неправду
И приведенный пример подтвреждает это.
FDN>То есть Timer в финализаторе не удаляет ссылку.
Да нет, Timer здесь не виноват. Это проблема дизайна. Зарегистрированный таймер получает ссылку от GC root-а. Соответственно, пока не будет Dispose он будет жить.
Для доказательства запустил пример под MemoryProfiler. Он показывает такую цепочку ссылок до Test:
System.Threading TimerCallback
System.Threading _TimerCallback
<root>
А вот точка создания _TimerCallback:
TimerBase.AddTimer(TimerCallback, object, uint, uint, StackCrawlMark&)
Timer.TimerSetup(TimerCallback, object, uint, uint, StackCrawlMark&)
Timer..ctor(TimerCallback, object, int, int)
Program.Test..ctor()
Program.Main()