Отследить утечку памяти в WPF - PullRequest
3 голосов
/ 29 апреля 2009

Контекст: Мы создаем основу для быстрой доставки приложений WPF. Эта структура использует Autofac в качестве контейнера IoC, а также использует регионы из Prism v1. Мы планируем задачи с параллельными расширениями от Microsoft.

Мы сталкиваемся со следующей проблемой: Когда мы загружаем приложение с пустыми представлениями (т.е. просто оболочкой с регионами и элементами управления заполнителями), память будет оставаться стабильной в течение примерно 60 секунд, и после этого она будет увеличиваться примерно каждую секунду с 4 КБ, затем 4 КБ, после этих 8 КБ. Таким образом, каждые 3 секунды к давлению памяти добавляется 16 КБ.

Что мы пытались отследить утечку. Я начал с использования dotTrace, но не увидел никакой разницы между двумя снимками, сделанными с интервалом в 30 минут. Перешел на .NET профилировщик памяти, потому что он дает мне больше информации, но опять же мы не можем видеть никаких различий между двумя снимками. Мы можем видеть, что несколько объектов создаются, но они тоже удаляются, что приводит к дельте 0. Так что я перешел на windbg, но результат тот же.

Еще одна странная вещь заключается в том, что когда мы запускаем sysinternals dbgvw, мы не видим вызовов в наших приложениях.

Есть ли у вас какие-либо предположения о том, что мы могли бы предпринять, чтобы узнать, кто / кто является виновником?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2009

Как оказалось, это была ошибка внутри WPF, и обходной путь должен был создать обработчик окна как самый первый объект или что-то в этом роде. Спасибо, ребята

0 голосов
/ 29 апреля 2009

Если вы ищете неуправляемые утечки и используете visual studio, вы можете получить удивительно полезную информацию, используя встроенные функции crt:

см. ответ на связанный вопрос

...