Утечка памяти в серебряной призме / единстве - PullRequest
1 голос
/ 01 февраля 2011

Мы создаем LOB-приложение, используя SL4, PRISM и MVVM.В последнее время я заметил, что мое приложение не освобождает память.Он начинается с 150 МБ и увеличивается до 1 ГБ + очень быстро, если я переключаю ч / б страницы.Наш проект включает в себя 3 модуля, каждый из которых имеет класс Controller (синглтон Unity), который прослушивает события и внедряет представления в соответствующий регион.Так вот, что происходит в этих контроллерах, когда запускается событие для внедрения представления.

var v = Container.resolve<view>()
var vm = Container.resolve<viewmodel>()
v.datacontext = vm;
myregion.addtoregion(v);

, поэтому 100 вызовов для этого представления превысят это 100 раз.А в методе addviewregion я удаляю все существующие представления перед добавлением нового.И, увидев проблему с памятью, я установил для view и viewmodel значение null в методе addviewtoregion для всех видов, которые необходимо удалить.Тем не менее потребление памяти такое же.Объекты Unity ContainerControllled ... (мои контроллеры) содержат ссылки на эти объекты?

1 Ответ

1 голос
/ 01 февраля 2011

Вы регистрируетесь для обработки событий в этих динамических представлениях и забыли отменить их регистрацию перед удалением представления?Обработка события создает неявную ссылку на объект, и именно отсюда обычно происходят утечки управляемой памяти.

Вы должны ознакомиться с этим руководством , чтобы отследить утечки элементов управления Silverlight с помощью WinDbg для проверки кучи и корней GC.

...