Утечки памяти в wpf C # - PullRequest
2 голосов
/ 27 мая 2011

Я разрабатываю приложение WPF MVVM (в версии 3.5) с использованием пакета GalaSoft.MvvmLight и набора инструментов WPF для DataGrid и DatePicker.Однако я сталкиваюсь с большим количеством утечек памяти в приложении каждый раз, когда я загружаю UserControl в MainWindow.Я пытаюсь получить точную проблему через профилировщик памяти Scitech, хотя у меня есть несколько серьезных вопросов:

  1. Как отсоединить / отсоединить RelayCommand от Event в ВМ?
  2. mscorlib и PresentationFramework также потребляют много памяти, и большинство из них strings.Я не знаю, откуда они.

Пожалуйста, помогите.

Ответы [ 2 ]

3 голосов
/ 30 мая 2011

Ознакомьтесь с этими статьями, чтобы узнать причины утечек памяти в WPF, найти решения и найти их -

Поиск утечек памяти в WPF на основе приложения:

http://blogs.msdn.com/b/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx

Утечки памяти в приложениях WPF:

http://svetoslavsavov.blogspot.com/2010/05/memory-leaks-in-wpf-applications.html

Поиск управляемых утечек памяти в WPF и приложения Silverlight:

http://blogs.msdn.com/b/wpftesting/archive/2009/03/21/finding-managed-memory-leaks-in-wpf-and-silverlight-applications.aspx

Если вы используете WPF 3.5 SP1, ознакомьтесь с этими исправлениями -

Исправления утечки памяти для WPF 3.5 SP1

http://blogs.msdn.com/b/jgoldb/archive/2010/06/14/memory-leak-hotfixes-for-wpf-3-5-sp1.aspx

Некоторые более редкие сценарии, вызывающие утечки памяти -

http://blog.ramondeklein.nl/?p=58

http://code.logos.com/blog/2008/10/detecting_bindings_that_should_be_onetime.html

2 голосов
/ 27 мая 2011

Вы уверены, что это утечки памяти? вы используете профилировщик правильно? Чтобы подтвердить, что у вас есть утечки памяти, вы должны запустить сборщик мусора, чтобы все объекты, которые не являются ссылками на стек-кадр, были удалены. После запуска сборщика мусора осмотрите в куче память объектов, которые должны были быть собраны.

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

...