Здравствуйте, johny5, Вы писали:
J>Очевидно scene референсится где то ещё.
Неочевидно.
Если Scene поддерживает IDispose, то сборщик мусора не удаляет его сразу, а отдаёт другому потоку, который выполняет Dispose(). В этом случае объект может пережить несколько сборок мусора.
Даже если нет IDispose и нет ссылок, объект может пережить несколько сборок мусора, если GC уже пометил его как "generation 1". В книжке Effective C# говорится, что GC проверяет generation 0 при каждом запуске, generation 1 примерно раз в 10 запусков, generation 2 — примерно раз в 100 запусков. Той книжке уже лет 10, что-то могло поменяться, но общий смысл, думаю, остался — объект может пережить сборку мусора.
Запустите в цикле пару сотен сборок мусора и после этого проверьте WeakReference.