【发布时间】:2021-05-02 06:31:09
【问题描述】:
当我尝试从我的文件夹中加载图像时,我得到一个:
OutOfMemory
我在使用 MemoryStream 时遇到以下错误:
public ImageSource ThumbnailLoadAsync()
{
var imageTemp = File.Exists(Image) ? Image : string.Format("{0}\\img\\unknow.png", ImageFolderRoot);
MemoryStream ms = new MemoryStream(File.ReadAllBytes(imageTemp));
ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
Thumbnail = (ImageSource)imageSourceConverter.ConvertFrom(ms);
this.NotifyPropertyChanged("Thumbnail");
return Thumbnail;
}
然后,我看到了一个更好的 MemoryStream 版本,它是 RecyclableMemoryStreamManager,但我也遇到了同样的错误。也许我用错了。
这是我的代码:
private RecyclableMemoryStreamManager _imageRecyclableMemoryStream;
public ImageSource ThumbnailLoad()
{
var imageTemp = File.Exists(Image) ? Image : string.Format("{0}\\img\\unknow.png", ImageFolderRoot);
_imageRecyclableMemoryStream = new RecyclableMemoryStreamManager();
ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
Thumbnail = (ImageSource)imageSourceConverter.ConvertFrom((RecyclableMemoryStream)_imageRecyclableMemoryStream.GetStream(File.ReadAllBytes(imageTemp)));
this.NotifyPropertyChanged("Thumbnail");
return Thumbnail;
}
【问题讨论】:
-
在得到 OOM 之前,您调用了该方法多少次?
-
_imageRecyclableMemoryStream = new RecyclableMemoryStreamManager();我怀疑你只想要new一次——而不是每次调用。 -
你为什么首先使用
MemoryStream?BitmapImage(new Uri(imageTemp));应该做我猜的工作吗? -
你为什么使用
MemoryStream而不是传入FileStream或使用codeproject.com/Questions/235637/…? -
@OlivierRogier 这些重复项似乎与位图/图像有关,这不是 OP 需要的。
标签: c# image out-of-memory thumbnails