当我想从内部存储加载图片时,有时会延迟,但有时会出现 OutOfMemmoryException。var picList = System.Instance.GetFiles("/storage/emulated/0/DCIM/Camera", true); //Its a string list, include the files name var inc = 0; foreach (var item in picList) { var byteArray = FileSystem.Instance.ReadFile("/storage/emulated/0/DCIM/Camera", item.Split('/').Last(), true); var toPicture = ImageSource.FromStream(() => new MemoryStream(byteArray)); var image = new Image { ClassId = inc.ToString(), Source = toPicture, WidthRequest = 200, HeightRequest = 200, }; ` } }我想我需要处理它,但我不知道如何处理。
2 回答
![?](http://img1.sycdn.imooc.com/54584d6100015f5802200220-100-100.jpg)
明月笑刀无情
TA贡献1828条经验 获得超4个赞
很可能您永远不会image.Dispose()
在图像实例上调用方法,因此永远不会释放分配给图像的内存。此外,您应该考虑不加载所有文件,而是按需加载它们。
![?](http://img1.sycdn.imooc.com/545863c10001865402200220-100-100.jpg)
富国沪深
TA贡献1790条经验 获得超9个赞
我认为您应该在循环外声明变量并重用它们,而不是在每次迭代时声明新变量:
byte[] byteArray = null;
MemoryStream toPicture = null;
Image image = null;
foreach (var item in picList)
{
byteArray = FileSystem.Instance.ReadFile("/storage/emulated/0/DCIM/Camera", item.Split('/').Last(), true);
toPicture = ImageSource.FromStream(() => new MemoryStream(byteArray));
image = new Image
{
ClassId = inc.ToString(),
Source = toPicture,
WidthRequest = 200,
HeightRequest = 200,
};
}
- 2 回答
- 0 关注
- 204 浏览
添加回答
举报
0/150
提交
取消