2012-05-02 6 views
4

У меня есть долгоживущий ViewModel и динамический вид, который добавляется в визуальное дерево всякий раз, когда пользователь хочет видеть ViewModel. Когда пользователь закрывает представление, он удаляется из визуального дерева. Я намеренно поставил 50Мб фиктивных данных в представлении (UserControl):MVVM-WPF: динамический вид и утечка памяти?

private byte[] data = new byte[50 * 1024 * 1024]; 

Я наблюдал память проводника процесса взмывает вверх, когда я добавляю Посмотреть на визуальном дереве. Я закрыл View (выгружает его из визуального дерева), а затем явно называется Garbage собирать метод:

GC.Collect(); 
GC.WaitForPendingFinalizers(); 
GC.Collect(); 

Однако память не снижается, и каждый раз, когда я добавить View на визуальное дерево, другой 50mb является добавлено. Я уверен, что мой ViewModel не ссылается на представление.

Любые предложения по решению этой проблемы или объясните мне, почему это так?

Спасибо!

РЕДАКТИРОВАТЬ:

Я использовал профилировщик памяти dotTrace и обнаружил, что нет никакой ссылки из ViewModel. Все ссылки на переменную «данные» являются объектами пользовательского интерфейса. Большая часть из них - из шаблона. Как правильно решить эту проблему?

+0

Есть ли код для представления, который присоединяется к событию ViewModel или другого объекта без интерфейса? – aqwert

+0

nope. Только нормальные привязки данных. – icube

+1

Я бы предложил использовать профилировщик .NET памяти, если это возможно для вас. Он должен дать вам прямой ответ на то, что заставляет его не собираться. – Dror

ответ

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