Как я могу сказать, что у моего управляемого кода утечка памяти из-за собственных вызовов библиотеки? - PullRequest
1 голос
/ 28 октября 2008

У меня есть управляемая dll, которая вызывает родную библиотеку. Эта нативная библиотека обычно возвращает IntPtrs. Они могут быть переданы другим методам в нативной библиотеке для выполнения каких-либо действий или для указания библиотеке освободить экземпляр, связанный с IntPtr. Но только некоторые экземпляры должны быть освобождены таким образом, другие управляются библиотекой. Проблема в том, что в документации не всегда ясно, какие экземпляры должны быть освобождены, а какие нет.

Что я хочу знать, так это то, есть ли способ узнать, сохранил ли мой код ссылки на какие-либо указатели, которые должны быть освобождены, и вызывает ли утечка памяти?

Ответы [ 3 ]

1 голос
/ 29 октября 2008

Я использую WinDbg (доступно здесь ). Его командная строка управляется, но предоставляет много хороших отчетов, включая информацию о стеке, количестве объектов и взятом размере (это может помочь указать на элементы, которые не удаляются).

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

1 голос
/ 29 октября 2008

Вы можете рассмотреть возможность использования SafeHandles для переноса дескрипторов, возвращенных из собственного кода. Это обеспечивает некоторую дополнительную ценность по сравнению с IntPtr.

1 голос
/ 28 октября 2008

Самый простой способ - использовать профилировщик памяти. Быстрый гугл нашел ссылку на MemProfiler . Я использовал это однажды (в качестве пробной версии), и я смог найти места, где я не мог правильно избавиться от DirectoryEntries. Я уверен, что есть и другие, включая этот один от RedGate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...