Какие инструменты и методы можно использовать для обнаружения и изоляции высокого использования памяти в приложениях .NET, которые вызывают значительный неуправляемый код? - PullRequest
2 голосов
/ 28 января 2009

Предположим, у меня есть приложение WinForms .NET, написанное на C #. Это приложение выделяет большие объемы памяти как из управляемых, так и из неуправляемых куч. Я могу (относительно) легко выяснить детали выделения (кто, когда, сколько и т. Д.) Управляемых объектов, используя такие инструменты, как Red Gate ANTS Profiler (который я не использовал) или JetBrains dotTrace .

Когда я сталкиваюсь с проблемами, когда управляемые объекты используют значительные собственные ресурсы (например, Image или большие COM-объекты) или когда я обращаюсь к неуправляемым сторонним библиотекам со значительными потребностями в памяти. До сих пор мне действительно приходилось выполнять какую-то детективную работу, чтобы выяснить 1) является ли управляемый или неуправляемый код бестселлером памяти и 2) кто использует большую часть неуправляемой кучи.

Единственный метод, который у меня есть на данный момент, - это установить счетчики производительности в perfmon, которые сравнивают размеры управляемой и неуправляемой кучи, распределения и т. Д. Если неуправляемая куча продолжает расти, пока управляемая куча стабильна, я знаю, что нужно начинать просмотр неуправляемых библиотек и / или объектов .NET, которые используют собственные ресурсы.

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

ОБНОВЛЕНИЕ: Чтобы быть более понятным, я хотел бы знать, как обнаружить проблемы с памятью (интенсивное использование, утечки) в неуправляемом коде, вызываемом из управляемого кода. Я считаю, что такие продукты, как dotTrace, отслеживают только управляемые объекты.

Ответы [ 3 ]

1 голос
/ 28 января 2009

Вы можете использовать любой из множества инструментов профилирования памяти, совместимых с приложениями .net. Вот некоторые из них:

1) .NET Profiler API

2) dotTRACE Profiler

3) Memory Profiler

0 голосов
/ 16 марта 2010

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

0 голосов
/ 28 января 2009

Обзор можно получить, просто взглянув на многие счетчики памяти .NET, доступные в Perfmon.

Если вы хотите использовать бесплатный инструмент, Средства отладки для Windows (в частности, WinDbg + SoS) могут сообщить вам, почему объекты не собираются должным образом.

...