#c# #c
#c# #c
Вопрос:
У нас есть приложение, разработанное на C # .NET Framework 2.0, которое взаимодействует с COM-компонентом (который разработан в неуправляемом коде C ). Иногда приложение выдает исключение нехватки памяти (довольно сложно воспроизвести).
Мы хотели бы иметь инструмент, позволяющий выяснить, есть ли у нас какие-либо утечки памяти, и определить основную причину исключения из памяти. Какие инструменты лучше всего подходят для этого? Идеальным инструментом была бы возможность подключения к запущенному процессу на компьютере пользователя для выполнения анализа.
Мы пробовали профилировщик памяти .NET, но он может подключаться только к запущенному процессу .NET framework 4.0. Мы также использовали средство проверки памяти (детектор утечки памяти C ); однако этот инструмент не дал нам достаточно подсказок при подключении к запущенному процессу.
Ответ №1:
Используйте профилировщик памяти — они могут помочь найти такие утечки, например:
- http://memprofiler.com / (коммерческий, управляемый И неуправляемый интегрированы в одном профилировщике!)
- http://www.red-gate.com/products/dotnet-development/ants-memory-profiler / (коммерческий)
- Профилировщик CLR от MS (бесплатно)
Ответ №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-кода приводит к нехватке памяти, поэтому код исключения может вводить в заблуждение.