Утечки памяти в Silverlight 4 - PullRequest
       22

Утечки памяти в Silverlight 4

3 голосов
/ 23 февраля 2011

У меня есть приложение Silverlight 4, в котором есть класс ViewModel с утечкой. Я подтвердил это с помощью WinDbg и команды! Gcroot для моего типа ViewModel. Мне не удалось точно определить точную причину утечки памяти, но я попытался устранить ее, используя следующую строку кода в соответствующем представлении, когда она закрыта:

HtmlPage.Window.Navigate(new Uri(MyTopLevelUri));   

Это заставляет приложение перезагружаться, и, следовательно, RootVisual повторно инициализируется. Теперь, когда я использую WinDbg, я вижу, что больше нет ссылок, удерживающих класс ViewModel после закрытия View.

Однако, когда я отслеживаю использование памяти приложением (используя SysInternals), оно постоянно увеличивается. Иногда он может немного падать, но если я продолжу открывать и закрывать подозрительное представление, я в конечном итоге получаю частный набор байтов памяти размером более 1 000 000 КБ. Кроме того, даже если я добавлю код для принудительной установки GC, он никогда не восстановит всю выделенную память. Должен ли я волноваться?

Есть ли утечки памяти, присущие SL4 и элементам управления? Я не очень верю, учитывая недавно выпущенный патч для исправления утечек памяти с помощью DataTemplates (версия 4.0.60129.0 http://timheuer.com/blog/).

1 Ответ

1 голос
/ 04 июля 2011

Похоже, что ответ на мой первоначальный вопрос (есть ли утечки памяти, свойственные SL4?) Действительно да!

http://forums.silverlight.net/forums/t/211504.aspx

https://connect.microsoft.com/VisualStudio/feedback/details/649246/usercontrol-resources-memory-leak-silverlight-4-0-60129-0

Две утечки, описанные в ссылках выше, по-видимому, исправлены в SL5.

...