2010-01-07 2 views
0

Какие лучшие способы для разработчика .NET выслеживать (и избегать) неуправляемый утечки в управляемом приложении?Методы поиска/предотвращения неуправляемых утечек в управляемом коде

Кажется, что есть много отличных ресурсов для отслеживания управляемых утечек, но я не нашел многого в отслеживании неуправляемых утечек в управляемом приложении.

This question связан, но задает вопрос с чисто неуправляемой точки зрения, поэтому многие ответы предполагают, что у вас есть доступ к неуправляемому коду, и никто не упоминает о каких-либо специфических ловушках или методах .NET.

Вот некоторые (очень простые) вещи я пытался:

  • DebugDiag. Это выглядит очень многообещающим, и это может сработать для вас, но это случается, когда я разбиваю свое приложение.
  • Rational PurifyPlus. К сожалению, также падает мое приложение.
  • AQTime (по рекомендации @Reed и @Caelum). Эта программа выглядит потрясающе, но, как и плакат вопроса @Caelum, AQTime также отключает мое приложение.
  • Временно удалите код, который создает объекты, которые, как я знаю, используют неуправляемую память.
  • Убедитесь, что приложение избавляется все объекты, которые реализуют IDisposable

я должен отметить, что я был в состоянии успешно профиля другого управляемого приложения (которое протечка неуправляемой памяти), используя профайлер выше. Пожалуйста, попробуйте, если у вас есть неуправляемая утечка.

ответ

0

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

Как вы сказали, обеспечение наилучшего использования IDisposable и мышления о финализаторах и то, как они влияют на ваше приложение, - это лучшие способы, которые я нашел, чтобы избежать утечек в первую очередь :).

DebugDiag - это то, что команда разработчиков Microsoft будет использовать при поиске проблем с вашим приложением, и я считаю, что наличие дампов памяти может даже быть интегрировано в диспетчер задач в Win 7 и Visual Studio 2010.

При использовании DebugDiag обязательно ознакомьтесь с расширениями SOS. Возможно, лучший вопрос - спросить, почему DebugDiag и PurifyPlus рушится для вашего конкретного приложения? Поскольку это похоже на то, что это вызовет проблемы, независимо от того, что вы пытаетесь ...

+0

Вы правы: найти способ использования этих профилографов - очень хорошая идея. Несмотря на то, что мое полное приложение вылетает при запуске через профилировщики, у меня есть успех, профилирующий небольшое, негерметичное приложение для воспроизведения. –

0

Лично я использую профилировщик кода, который поддерживает как управляемый, так и неуправляемый (и смешанный режим) код: AQTime. Он будет обрабатывать отслеживающую память как из управляемого, так и неуправляемого кода, поэтому значительно упрощает отслеживание утечек в смешанных проектах.

Смежные вопросы