Инструменты для обнаружения утечек памяти для C # и неуправляемых приложений на C

#c# #c

#c# #c

Вопрос:

У нас есть приложение, разработанное на C # .NET Framework 2.0, которое взаимодействует с COM-компонентом (который разработан в неуправляемом коде C ). Иногда приложение выдает исключение нехватки памяти (довольно сложно воспроизвести).

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

Мы пробовали профилировщик памяти .NET, но он может подключаться только к запущенному процессу .NET framework 4.0. Мы также использовали средство проверки памяти (детектор утечки памяти C ); однако этот инструмент не дал нам достаточно подсказок при подключении к запущенному процессу.

Ответ №1:

Используйте профилировщик памяти — они могут помочь найти такие утечки, например:

Ответ №2:

Короткий ответ

Вы пробовали Microsoft Application Verifier? Это очень маленький, я бы сказал, минималистичный, но удивительно мощный инструмент.

Длинный ответ

Во время моего расследования проблем с утечкой памяти я использовал Microsoft Windbg, Microsoft Application Verifier и я тщательно оценил профилировщик производительности Red Gate ANTS (который я рекомендовал купить, и я лично видел, как его рекомендовали покупать различные разработчики во многих разных командах), dotTrace и профилировщик памяти .Net.

Определенно полезно получить и научиться использовать один или несколько таких инструментов, возможно, затем установить в виртуальной среде разработки, размещенной на какой-нибудь виртуальной машине, объединенной между разработчиками команды.

Если вы оцените эти и любые другие инструменты, большим преимуществом для меня будет возможность исследовать дампы памяти, взятые с помощью Windbg, поскольку их легче всего получить даже от клиентов.

Ответ №3:

попробуйте WinDbg и эту квитанцию: http://www.codeproject.com/KB/cpp/MemoryLeak.aspx

Ответ №4:

Для самых простых тестов вы можете использовать sysinternals procexp.exe чтобы проверить, действительно ли у вас проблема с утечкой памяти. При обнаружении нулевого указателя там, где его не ожидали, большое количество COM-кода приводит к нехватке памяти, поэтому код исключения может вводить в заблуждение.