Я наследую существующее приложение, в котором есть несколько дыр в памяти. Я подозреваю, что они вызваны обработчиками событий, которые подписаны, но никогда не выпускаются. Какие инструменты или ресурсы я могу использовать, чтобы помочь идентифицировать объекты, которые удерживаются даже после того, как они вышли из области видимости из-за открытого обработчика событий?
2 ответа
Мне удалось успешно использовать профилировщик памяти ANTS от redgate преследовать похожие проблемы. Это не дешевый продукт, но, по моему опыту, он оказался очень полезным и оправдал свои затраты.
JetBrains также имеет профилировщик памяти: dotTrace Memory. У меня есть, но недостаточно, чтобы дать рекомендацию. Это тоже не бесплатно (если вы не выиграете лицензию в группе пользователей). :)
Я бы также проверил, что все объекты, классы которых реализуют IDisposable, правильно расположены. Блок using
обеспечит это даже в случае возникновения исключения. Хотя здесь используются неуправляемые ресурсы, а не память, на практике разница может быть незначительной.
См. Также Обнаружение «просочившихся» объектов IDisposable, где упоминаются несколько профилировщиков памяти.
Похожие вопросы
Связанные вопросы
Новые вопросы
.net
НЕ используйте для вопросов о .NET Core - используйте вместо этого [.net-core]. .NET Framework - это программная среда, предназначенная главным образом для операционной системы Microsoft Windows. Он включает в себя реализацию библиотеки базовых классов, общеязыковой среды выполнения (обычно называемой CLR), общей системы типов (обычно называемой CTS) и динамической среды исполнения. Он поддерживает множество языков программирования, включая C #, VB.NET, F # и C ++ / CLI.