Утечка памяти при изменении изображений в Windows Phone 7 - PullRequest
3 голосов
/ 04 марта 2012

У меня проблема при многократном изменении изображения контейнера изображений в Windows Phone 7.5

Вот неправильный код:

public void displayImages() {
    image1.Source = new System.Windows.Media.Imaging.BitmapImage
       (new Uri("BrainImg/axis/" + axis + currentSlice + ".jpg",
             UriKind.RelativeOrAbsolute));
    image2.Source = new System.Windows.Media.Imaging.BitmapImage
       (new Uri("BrainImg/aseg/" + axis + currentSlice + ".png",
             UriKind.RelativeOrAbsolute));
}

private void slider1_ValueChanged(object sender, 
                                  RoutedPropertyChangedEventArgs<double> e)
{
    // do something
    if (this.slider1 != null)
    {
        currentSlice = (int) this.slider1.Value;
        displayImages();
    }
}

После некоторых изменений (примерно 100 Iне хватило памяти)

Я уже пытался установить image.Source на null перед присвоением нового значения.

Ответы [ 2 ]

7 голосов
/ 04 марта 2012

Поведение по умолчанию элемента управления изображения заключается в кэшировании изображения для последующего повторного использования. Это означает, что память все еще используется контроллером. Вам необходимо явно освободить ссылки на изображение, чтобы освободить память

Как это:

  BitmapImage bitmapImage = image.Source as BitmapImage;
  bitmapImage.UriSource = null;
  image.Source = null;

Подробнее на: http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx

1 голос
/ 04 марта 2012

Трудно определить фрагменты кода в сообщении о причине утечки памяти.Одним из предложений является поиск объектов с коротким сроком службы, подписывающихся на события с объектами с более длительным сроком службы.Вы должны профилировать свое приложение, чтобы увидеть, что происходит в управляемой памяти, например, выживание объектов и т. Д. Проверьте Профилирование памяти для производительности приложений blogpost, чтобы узнать, как использовать профилировщик для обнаружения проблем с памятью.

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