Получить из объекта все объекты, которые ссылаются на него

188
18 января 2018, 17:52

Вопрос интереса ради:

CLR удаляет объекты на основании отсутствия корневых ссылок => он владеет информацией о ссылках между объектами.

Теперь собственно сам вопрос:

Допустим есть 2 объекта.

1 Объект содержит поле, которое ссылается на объект 2.

Можно ли имея на руках второй объект понять, что на него что-то ссылается и получить эту ссылку?

Answer 1

Нет, этой информации нет, т. к. объект знает только свои ссылки на другие объекты. Вы можете её получить, но это сложно.

Смотрите, что делает сборщик мусора. Он знает все корневые объекты. Это статические объекты, а также объекты, ссылки на которые есть в стеке какого-либо из потоков.* Он считает их достижимыми, не подлежащими удалению. Затем, он проходит по ссылкам из уже найденных достижимых объектов, найденные объекты тоже объявляет достижимыми. Затем он обходит вновь определённые достижимые объекты, проходит по их ссылкам, и найденные объекты тоже объявляет достижимыми.

Таким образом, обходя достижимые объекты, сборщик мусора рано или поздно натыкается на ссылку, ведущую из первого объекта во второй. Или не натыкается, если первый объект не достижим.

Повторять этот алгоритм большого смысла нет, т. к. это просто медленно. (И у нас в руках лишь довольно медленная рефлексия.)

Проблему, которая у вас на руках, нужно решать по-другому. Например, заставлять объекты, которым нужен ваш объект №2, регистрироваться самостоятельно.

*ну и объекты, на которые ссылаются всякие GCHandle

READ ALSO
Отправить POST запрос

Отправить POST запрос

Нужно отправить POST запрос с параметрами и прочитать html в ответеВот мой метод :

202
Мониторинг ресурсов сети

Мониторинг ресурсов сети

Нужно сделать программу которая показывает: на сколько каждый процесс использует сеть и на какой ИП он отправляет данныеТак сказать аналог...

198
Поиск по DataGrid из внутренних TextBox/ComboBox. Mvvm - C# WPF/.NET 4.x

Поиск по DataGrid из внутренних TextBox/ComboBox. Mvvm - C# WPF/.NET 4.x

Доброго дня всем! Очень интересует как поместить внутрь DataGrid несколько TextBox'ов или ComboBox'ов, что бы по ним совершать поиск по строкам или запрос...

217
При выходе с приложения не сохраняются данные в PlayerPrefs Unity Android

При выходе с приложения не сохраняются данные в PlayerPrefs Unity Android

Создал приложение в Unity на iOS всё работает, поменял платформу на Android, так всё сразу упало, я сохранял данные при выходе,

304