【问题标题】:Memory Leak changing images in Windows Phone 7Windows Phone 7 中的内存泄漏更改图像
【发布时间】:2012-03-21 22:35:06
【问题描述】:

我在 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 次我内存不足)

在分配新值之前,我已经尝试将 image.Source 设置为 null

【问题讨论】:

    标签: c# silverlight windows-phone-7 memory-leaks


    【解决方案1】:

    Image 控件的默认行为是缓存图像以供将来重用。这意味着内存仍然被控制器使用。您需要显式释放对图像的引用以释放内存

    像这样:

      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

    【讨论】:

    • 这确实解决了问题。非常感谢您的回答。
    【解决方案2】:

    从帖子中的代码 sn-ps 很难确定内存泄漏的原因。一个建议是寻找订阅事件的短生命周期的对象具有更长的生命周期。您应该分析您的应用程序以查看托管内存中发生的情况,例如幸存的对象等。查看Memory Profiling for Application Performance 博客文章,了解如何使用分析器检测内存问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-01
      • 2014-05-03
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      相关资源
      最近更新 更多