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