我正在上传一张大图片~10Mb,我有以下代码:
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
foreach (var file in files)
{
var image = Image.FromStream(file.InputStream, true, true);
...
}
}
有时会抛出Out of Memory
,有时会GDI+ generic errors
。我无法使用以下代码在控制台应用程序中重现这一点:
using (FileStream stream = File.Open(@"d:\test.jpg", FileMode.Open))
{
var image = Image.FromStream(stream);
}
这些例外的原因是什么?一个注意事项:对于小图像,一切都很好。
答案 0 :(得分:0)
参考 - out of memory Image.FromFile
我认为您无法在控制台应用中重现此原因的原因是您使用的是一次性代码块(使用块)。
尝试将代码更改为此类代码 -
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
foreach (var file in files)
{
fs = new FileStream(image_url, FileMode.Open, FileAccess.Read);
img = Image.FromStream(fs);
var image = Image.FromStream(fs);
...
//after you are done call below line
fs.Close();
}
}
或者您可以在for-loop中使用block -
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
foreach (var file in files)
{
using (FileStream stream = File.Open(<give_file_URL_here>, FileMode.Open))
{
var image = Image.FromStream(stream);
//...
}
}
}
答案 1 :(得分:0)
我已阅读许多类似例外的答案,但没有一个可以适用于我的案例。图像本身没有损坏或位错误。问题是我在32 bit mode
进行调试。一旦我在VS2015
中更改此设置,它就像一个魅力。似乎Image.FromStream
需要大量RAM
才能显示大图片。
工具 - &gt;选项 - &gt;项目和解决方案 - &gt;网络项目 - &gt;使用 64位......