2015-06-12 1 views
1

Я пишу приложение WPF, которое использует несколько неуправляемых DLL. Что-то в программе вызывает утечку памяти, и я контролировал приложение, используя Redgate ANTS 8 Memory Profiler. ANTS показывает, что использование памяти MSVCR110.dll постоянно увеличивается.Как найти DLL, которая вызывает утечку памяти, а не напрямую ссылается на приложение

Вопрос в том, что управляемый код может вызвать эту утечку с помощью MSVCR110.dll?

Если не удается найти, какая из неуправляемых dll использует MSVCR110.dll и вызывает утечку?

(Моя программа имеет ссылку на MSVCR110.dll непосредственно.)

+0

Отображается ли утечка стека? –

+0

ANTS не предоставляет никакой информации о неуправляемых dll, кроме того, сколько памяти они используют. Есть ли другой способ получить стек? –

+0

Попробуйте Deleaker, он поставляется с бесплатной пробной версией, возможно, он может отображать трассировку стека. –

ответ

-1

Ответ был нелегко найти. Я пробовал каждую DLL, что я подозревал один за другим. Утечка была восстановленным массивом в классе оболочки C++/CLI. Поскольку это управляемая dll, я думаю, родные «новые» вызовы прослеживаются через msvcr110.dll, а ANTS показывает утечку в этой DLL.

0

Пожалуйста, посмотрите на мой ответ для отладки Из за исключением памяти, это может быть какой-то помощи. Идея остается MSVCR110.dll, которая представляет собой двоичный файл MS, не будет протекать, некоторые API, использующие его, делают много распределений, что вызывает утечку. Вам нужно набить стек с максимальным распределением, затем сузить объект и выяснить метод, который это делает, время от времени может быть логической проблемой, что слишком много распределений выполняется, и они не отменены для GC для сбора объект, тем самым утечка памяти кучи. В основном через распределение является и не релиз не является причиной управляемой памяти утечки

When I use Socket.IO, why I got an error An unhandled exception of type 'System.OutOfMemoryException'

0

Возьмите несколько снимков и посмотреть, есть ли рост в любых управляемых объектов. Вы можете выбрать объекты с исходными параметрами в профиле профилей ANTS, и если экземпляр подсчитает, что он растет для любого из ваших объектов. И тогда вы можете взглянуть на «График хранения экземпляров» для любого растущего экземпляра и посмотреть, что содержит ссылку.

А также убедитесь, что вы отменили подписку на любую подписку, которую вы передаете сторонним компонентам, и позвоните по адресу dispose и установите нулевые указатели соответствующим образом.

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