Windows Phone 8里面的LongListSelector内存泄漏图片

我有一个LongListSelector,它包含一个从Web加载大量图像的图像控件,这个工作正常一段时间,但是在我加载了一些图像后,我得到了内存exception。 我读过其他人对于内存不足以及大量图片有相同问题,但仍然没有找到解决方案。 我已经读过它与image / BitmapImage缓存有关。

这是我的LongListSelector,它包含图像控件:

                   

在我的MainPage.xaml.cs中,我设置了LongListSelector的DataContext:

 llsGameList.DataContext = gd.GetGamesListItems; 

这是我用来存储我的图像的类:

 public class GetGamesList { public Uri BoxArtFrontThumb { get; set; } } 

这是包含所有图像的ObservableCollection:

  private ObservableCollection _GetGamesListItems = new ObservableCollection(); public ObservableCollection GetGamesListItems { get { return this._GetGamesListItems; } } 

我希望我能清楚地解释清楚。 我真的希望有人可以帮助我解决这个记忆问题。 谢谢。

我知道无法阻止LongListSelector泄漏内存。 但是,您可以使用一个小技巧来释放图片使用的内存。

首先,创建一个名为SafePicture的新类,并使其inheritance自ContentControl 。 在里面,实现逻辑以释放位图使用的内存:

 public class SafePicture : System.Windows.Controls.ContentControl { public SafePicture() { this.Unloaded += this.SafePictureUnloaded; } private void SafePictureUnloaded(object sender, System.Windows.RoutedEventArgs e) { var image = this.Content as System.Windows.Controls.Image; if (image != null) { image.Source = null; } } } 

然后,使用此自定义控件包装所有图片:

                      

请注意,命名空间my指的是您放入SafePicture的程序集,并且必须在页面顶部声明:

 xmlns:my="clr-namespace:yourNamespace"