C# 带有图像的列表框泄漏内存崩溃,OutofMemoryException

C# 带有图像的列表框泄漏内存崩溃,OutofMemoryException,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,在我的WP8应用程序中,我有一个带有lisbox的页面,我将图像列表绑定到ItemTemplate中的其他数据。我一离开页面,就觉得这些图片并没有从记忆中释放出来 以下是代码详细信息: XAML 尝试一些通常不应该做的事情。通过调用垃圾收集器 GC.Collect(); 当您导航到另一个页面时,您也可以尝试删除导航backbackback,这将删除您页面的所有知识,从而在返回时强制重新启动列表和页面。您是否可以将代码添加到GetLargwImages?问题已用请求的方法

在我的WP8应用程序中,我有一个带有lisbox的页面,我将图像列表绑定到ItemTemplate中的其他数据。我一离开页面,就觉得这些图片并没有从记忆中释放出来

以下是代码详细信息:

XAML


尝试一些通常不应该做的事情。通过调用垃圾收集器

            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();