Проблема утечки памяти в Windows Phone Development - Silver Light Framework - PullRequest
1 голос
/ 27 февраля 2012

Я создаю одну игру на Windows Phone, используя c # и платформу silver light. Я новичок в этой технологии и в настоящее время сталкиваюсь с проблемой утечки памяти.

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

Может ли кто-нибудь дать общие советы, как лучше всего использовать сборщик мусора и управление памятью, поскольку это кажется проблемой прямо сейчас. Когда мой сборщик мусора достигает размера 5 lac, он перестает собирать новые вещи и происходит сбой приложения.

Я также пытался очистить параметр передачи сборщика мусора 0 в gc collect, но это приводит к сбою приложения.

Не могли бы вы, пожалуйста, направлять и помогать по основным вопросам, которые необходимо соблюдать, и по которым нужно следовать, чтобы избежать подобных проблем и наилучшим образом использовать сбор GC?

Спасибо заранее, Jacob

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

В общем, вы никогда не должны вызывать GC.Collect самостоятельно, поскольку неиспользуемые объекты будут автоматически собираться каждые несколько секунд.

Что касается того, что может предотвратить объекты собираются, все сводится к тому, что они «укоренены».Корни включают в себя:

  • Любые статические ссылки
  • Любые ссылки, хранящиеся в цикле выполнения (ваша Application - самая близкая вещь здесь)
  • Все, что отображается натекущая страница или любая другая страница за ней
  • Все, что угодно , на которое ссылается с помощью любого из вышеперечисленных (включая события пользовательского интерфейса), или на что-либо, на которое ссылается любое из вышеуказанного (и т. д.).

В приведенных выше сценариях эти объекты и любые объекты, на которые они ссылаются , не могут быть GC'd.Так же как совет:

  • Избегайте определения чего-либо как static
  • Будьте осторожны, сколько объектов удерживается Application
  • Избегайте модели навигации, которая позволяетваш задний стек увеличится до неограниченных уровней
  • Потенциально посмотрите на установку ссылок на большие наборы данных на null в методе OnNavigatedFrom вашей страницы / viewmodel и повторно инициализируйте их в OnNavigatedTo

Я бы порекомендовал использовать Windows Phone Profiler , который поставляется с 7.1 SDK.Он скажет вам, какие объекты находятся в памяти и почему.

0 голосов
/ 27 февраля 2012

Не видя ни одного вашего кода, трудно дать конкретный совет.

Однако я настоятельно рекомендую вам запустить инструмент профилирования памяти, такой как ANTS Memory Profiler или .Net Memory Profiler .Эти инструменты покажут вам, какие части вашего кода никогда не выпускаются, и очень полезны для внесения необходимых изменений.

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