У меня есть объект, который, по моему мнению, поддерживается только методом WeakReference. Я проследил его держателей ссылок, используя SOS и SOSEX, и оба подтверждают, что это так (я не эксперт SOS, поэтому я мог ошибаться в этой точке).
Стандартное объяснение WeakReferences заключается в том, что GC игнорирует их при выполнении своих разверток. Тем не менее, мой объект выживает при вызове GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced).
Возможно ли для объекта, на который ссылаются только ссылки WeakReference, чтобы выжить в этой коллекции? Есть ли еще более тщательная коллекция, которую я могу заставить? Или, должен ли я повторно посетить мое убеждение, что единственные ссылки на объект слабы?
Обновление и заключение
Основная причина заключалась в том, что в стеке была ссылка, которая блокировала объект. Непонятно, почему ни SOS, ни SOSEX не показывали эту ссылку. Ошибка пользователя всегда возможна.
В ходе диагностики первопричины я сделал несколько экспериментов, которые продемонстрировали, что WeakReferences для объектов второго поколения могут существовать на удивление долгое время. Однако объект 2-го поколения WRd не сможет выжить GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced).