Подсчет экземпляров класса в AppDomain - PullRequest
1 голос
/ 15 октября 2008

Интересно, есть ли способ программно или с помощью стороннего инструмента (профилировщика?) Получить представление о том, сколько экземпляров класса в настоящее время активно в AppDomain (включая или исключая производные классы), и даже лучше где они расположены (не уверен, что это вообще возможно).

Я знаю, что мог бы как-то изменить свои собственные классы, включив в них какой-нибудь счетчик, но я также хочу это для (управляемых) классов, которые я не контролирую.

Это вообще возможно? Некоторые подсказки или ключевые слова будут полезны:)

Ответы [ 3 ]

4 голосов
/ 15 октября 2008

Я думаю, что вы хотели бы использовать SOS и Windows Debugging Toolkit.

Есть замечательный блог от Тесс Ферандез, в котором есть тонна информации об его использовании.

http://blogs.msdn.com/tess/

1 голос
/ 15 октября 2008

Я не думаю, что есть хороший способ сделать это с помощью отражения так же, как вы можете перечислять классы или методы, скажем. CLR Profiler присоединится к процессу и затем сообщит, сколько экземпляров каждого класса выделено. Теоретически вы могли бы написать свой собственный код для того же API , который использует CLR Profiler, но я подозреваю, что это потребует много усилий и не обязательно поможет.

1 голос
/ 15 октября 2008

Я почти не решаюсь ответить, потому что должно быть несколько более простых способов, но используя adplus , чтобы получить дамп зависания, а затем используйте WinDbg с Son of Strike перемещаться по файлу дампа.

Вы также можете получить профилировщик , который поможет вам с простейшим анализом на свалке зависания.

...