C# 带有图像的列表框泄漏内存崩溃,OutofMemoryException
在我的WP8应用程序中,我有一个带有lisbox的页面,我将图像列表绑定到ItemTemplate中的其他数据。我一离开页面,就觉得这些图片并没有从记忆中释放出来 以下是代码详细信息: XAMLC# 带有图像的列表框泄漏内存崩溃,OutofMemoryException,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,在我的WP8应用程序中,我有一个带有lisbox的页面,我将图像列表绑定到ItemTemplate中的其他数据。我一离开页面,就觉得这些图片并没有从记忆中释放出来 以下是代码详细信息: XAML 尝试一些通常不应该做的事情。通过调用垃圾收集器 GC.Collect(); 当您导航到另一个页面时,您也可以尝试删除导航backbackback,这将删除您页面的所有知识,从而在返回时强制重新启动列表和页面。您是否可以将代码添加到GetLargwImages?问题已用请求的方法
尝试一些通常不应该做的事情。通过调用垃圾收集器
GC.Collect();
当您导航到另一个页面时,您也可以尝试删除导航backbackback,这将删除您页面的所有知识,从而在返回时强制重新启动列表和页面。您是否可以将代码添加到GetLargwImages?问题已用请求的方法更新。也许这会有所帮助:我已通过链接,我知道如果重复使用单个图像控件加载多个图像,该解决方案是合适的。在我的情况下,我正在加载列表中的多个图像-如何从内存中清除它们。您的意思是,在OnNavigatedFrom方法中使用空图像重新分配我的列表框吗?请尝试为列表框中的每个位图图像分配一个空内存流,就像他在DisposeImage方法中所做的那样。看看这种变通方法是否有效
public class ImageHolder{
public BitmapImage DefaultImagePath { get; set; }
public string ImageName { get; set; }
}
// list binding
List<ImageHolder> images=Utils.GetLargeImages();
userList.ItemSource=images;
public static List<ImageHolder> GetLargeImages(){
List<ImageHolder> images= new List<ImageHolder>();
for (int i = 0; i < 10; i++)
{
ImageHolder hold=new ImageHolder();
hold.ImageName=i+"";
hold.DefaultImagePath = new BitmapImage
{
DecodePixelWidth = 120,
DecodePixelHeight = 120,
UriSource = new Uri("Image_"+i+".png", UriKind.RelativeOrAbsolute) // this image is in 400x400 size
};
images.Add(hold);
}
return images;
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
userList.ItemsSource = null;
}
GC.Collect();