Я наследую существующее приложение, в котором есть несколько дыр в памяти. Я подозреваю, что они вызваны обработчиками событий, которые подписаны, но никогда не выпускаются. Какие инструменты или ресурсы я могу использовать, чтобы помочь идентифицировать объекты, которые удерживаются даже после того, как они вышли из области видимости из-за открытого обработчика событий?

3
Jim Wooley 25 Авг 2011 в 21:07

2 ответа

Лучший ответ

Мне удалось успешно использовать профилировщик памяти ANTS от redgate преследовать похожие проблемы. Это не дешевый продукт, но, по моему опыту, он оказался очень полезным и оправдал свои затраты.

2
PaulF 25 Авг 2011 в 17:23

JetBrains также имеет профилировщик памяти: dotTrace Memory. У меня есть, но недостаточно, чтобы дать рекомендацию. Это тоже не бесплатно (если вы не выиграете лицензию в группе пользователей). :)

Я бы также проверил, что все объекты, классы которых реализуют IDisposable, правильно расположены. Блок using обеспечит это даже в случае возникновения исключения. Хотя здесь используются неуправляемые ресурсы, а не память, на практике разница может быть незначительной.

См. Также Обнаружение «просочившихся» объектов IDisposable, где упоминаются несколько профилировщиков памяти.

0
Community 23 Май 2017 в 12:19