带有图像的列表框泄漏内存崩溃并出现内存外异常
本文关键字:内存 崩溃 异常 泄漏 图像 列表 | 更新日期: 2023-09-27 17:59:07
在我的WP8应用程序中,我有一个带有lisbox的页面,我将图像列表与其他数据绑定到ItemTemplate中。我一离开页面,就觉得这些图像并没有从记忆中解放出来。
以下是代码详细信息:
XAML
<ListBox x:Name="userList" ItemTemplate="{StaticResource DataTemplate1}" Tap="userList_Tap" Loaded="userList_Loaded">
<StackPanel Orientation="Horizontal" Width="220" Height="220" HorizontalAlignment="Center" VerticalAlignment="Center" >
<Image x:Name="episodeImage" HorizontalAlignment="Right" Height="120" Margin="0" VerticalAlignment="Top" Width="120" Source="{Binding DefaultImagePath}" />
<TextBlock x:Name="episodeName" HorizontalAlignment="Left" Margin="4,0,0,36" TextWrapping="Wrap" Width="Auto" Foreground="White" FontFamily="Segoe WP" Text="{Binding ImageName}" VerticalAlignment="Bottom"/>
</StackPanel>
</ListBox>
C#数据背后:
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;
}
在(GetLargeImages()方法)中获取图像时,我使用了DecodePixelWidth和DecodePixel Height。
onnavigatedfrom方法我正在将null设置为Listbox。但无济于事,在进出页面几次后,我的应用程序出现了内存外异常。
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
userList.ItemsSource = null;
}
尝试一些通常不应该做的事情。通过调用垃圾收集器。
GC.Collect();
当你导航到另一个页面时,你也不能尝试删除导航后台,这应该会删除你页面的所有知识,从而在返回时强制重新实例化列表和页面。