C# 通过文件选择器加载大量图像时出现内存不足异常
Windows Phone 8.1:C# 通过文件选择器加载大量图像时出现内存不足异常,c#,out-of-memory,windows-phone-8.1,C#,Out Of Memory,Windows Phone 8.1,Windows Phone 8.1: foreach (StorageFile file in ImageFiles) { ClassForFolderImages CFFI = new ClassForFolderImages(); using(var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
foreach (StorageFile file in ImageFiles)
{
ClassForFolderImages CFFI = new ClassForFolderImages();
using(var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
bitmapImage.DecodePixelWidth = 80;
bitmapImage.DecodePixelHeight = 80;
await bitmapImage.SetSourceAsync(stream);
CFFI.imageForFolder = bitmapImage;
GridViewName.Add(CFFI);
}
}
在上面的代码片段中,“ImageFiles”包含大量图像,“GridViewName”是可观察集合的名称,稍后我将其绑定到我希望在其中显示这些图像的网格视图。
ClassForFolderImages类如下所示:
public class ClassForFolderImages : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private BitmapImage img;
public BitmapImage imageForFolder
{
get { return img; }
set
{
img = value;
FirePropertyChangedEvent("imageForFolder");
}
}
public ClassForFolderImages()
{
}
private void FirePropertyChangedEvent(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
此代码段在手机模拟器和设备上的少量图像中运行良好,但在设备上-当图像数量在某个点增加时,它开始抛出以下错误(在App.g.i.cs处中断):
有人能提出解决此问题的建议吗?完成后是否处理流?请尝试。不起作用。除了通过处理流来实际清理图像外,我建议只在实际可见的图像中进行流式处理,并向上和向下设置合理的缓冲区。同意J.Steen的观点。寻呼是你的方式,不能这样。一次需要所有的图像。
Exception = The function evaluation was disabled because of an out of memory exception.
Handled = The function evaluation was disabled because of an out of memory exception.
Message = The function evaluation was disabled because of an out of memory exception.