.NET профилирование мусора: подсчитать, сколько мусора делает кусок кода - PullRequest
5 голосов
/ 22 февраля 2011

Я хотел бы написать служебный класс, который поможет мне определить, сколько мусора делает определенный кусок кода.

Что-то, что я могу использовать, например: GarbageProfiler.Start(); и int numGarbage = GarbageProfiler.End();

Идея достаточно проста.Но имеет ли это смысл?Есть ли какие-нибудь инструменты для этого?

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

Но имеет ли это смысл?

номер

Вам, по крайней мере, придется различать поколения мусора.

Память, которая выделяется определенным фрагментом кода и все еще содержит в конце, (может быть) намного дороже, чем объекты, которые она быстро освободила.

0 голосов
/ 22 февраля 2011

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

Есть также несколько счетчиков производительности, которые вы можете прочитать непосредственно перед GC.Collect() и после него, что может дать вам представление.

Я подвергаю сомнению использование всего этого; вы никогда не узнаете, когда включится GC, поэтому вы не знаете, когда мусор будет переработан. И вызов GC.Collect () не очень хорошая идея (в большинстве случаев)

0 голосов
/ 22 февраля 2011

Существует довольно много профилировщиков памяти. Быстрый поиск в Google даст вам несколько.

Существует даже API для профилирования памяти .Net-приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...