Как увидеть какие типы объектов собирает GC
От: Vladek Россия Github
Дата: 06.12.19 13:00
Оценка:
Есть небрежно написанное приложение C#/UWP, которое часто тратит время на сборку мусора — хотелось бы увидеть где именно плодятся объекты и какие у них типы.

Встроенные средства Visual Studio 2017/2019 Enterprise позволяют это сделать? Что-то мне сложно понять, что за инфу генерят встроенные профайлеры и как её читать. Нужна простая вещь, видеть события — вот приложение насоздавало миллион объектов этого типа и вот они все были собраны в такой-то момент времени.
Re: Как увидеть какие типы объектов собирает GC
От: Sharov Россия  
Дата: 06.12.19 13:48
Оценка: +1
Здравствуйте, Vladek, Вы писали:

V>Есть небрежно написанное приложение C#/UWP, которое часто тратит время на сборку мусора — хотелось бы увидеть где именно плодятся объекты и какие у них типы.


V>Встроенные средства Visual Studio 2017/2019 Enterprise позволяют это сделать? Что-то мне сложно понять, что за инфу генерят встроенные профайлеры и как её читать. Нужна простая вещь, видеть события — вот приложение насоздавало миллион объектов этого типа и вот они все были собраны в такой-то момент времени.


dotMemory
Кодом людям нужно помогать!
Re: Как увидеть какие типы объектов собирает GC
От: Mihas  
Дата: 06.12.19 13:51
Оценка:
Здравствуйте, Vladek, Вы писали:

V> хотелось бы увидеть где именно плодятся объекты и какие у них типы.

V>Встроенные средства Visual Studio 2017/2019 Enterprise позволяют это сделать?

Профайлер студии позволяет увидеть: сколько и каких объектов создано в процессе работы программы, сколько они занимают памяти, а также перейти в то место, где создан конкретный экземпляр. За давностью лет я, правда, позабыл, как его настраивать.

UPD
Глянул бегло, как сейчас.
В свежих студиях при запуске приложения по умолчанию открывается окошко Diagnostic Tool.
1. Выделяешь интервал на графике Process Memory
2. Во вкладке Memory Usage жмешь Take Snapshot
3. Тычешь в появившуюся строку, откроется полный список объектов, которые ты наплодил

Писать дольше, в общем...
Отредактировано 06.12.2019 14:01 Mihas . Предыдущая версия .
Re: Как увидеть какие типы объектов собирает GC
От: Sharowarsheg  
Дата: 06.12.19 14:10
Оценка:
Здравствуйте, Vladek, Вы писали:

V>Встроенные средства Visual Studio 2017/2019 Enterprise позволяют это сделать? Что-то мне сложно понять, что за инфу генерят встроенные профайлеры и как её читать. Нужна простая вещь, видеть события — вот приложение насоздавало миллион объектов этого типа и вот они все были собраны в такой-то момент времени.


Не знаю насчёт UWP, но есть Debug -> Performance Profiler -> .NET Object Allocation Tracking
Visual Studio Community 2019 16.3.10

как раз там будет список, кого насоздавали, кого убрали.
Re[2]: Как увидеть какие типы объектов собирает GC
От: Vladek Россия Github
Дата: 10.12.19 09:55
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Глянул бегло, как сейчас.

M>В свежих студиях при запуске приложения по умолчанию открывается окошко Diagnostic Tool.
M>1. Выделяешь интервал на графике Process Memory
M>2. Во вкладке Memory Usage жмешь Take Snapshot
M>3. Тычешь в появившуюся строку, откроется полный список объектов, которые ты наплодил

То, что нужно, но работает нестабильно — иногда не делает снимков.
Re[2]: Как увидеть какие типы объектов собирает GC
От: qxWork Голландия http://www.jetbrains.com/company/people/Coox_Sergey.html
Дата: 10.12.19 16:58
Оценка: +1
Здравствуйте, Sharov, Вы писали:

S>dotMemory

Я бы даже сказал, вот эта его часть про memory traffic
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.