System.Drawing.Image.FromFile "System.OutOfMemoryException: Out of memory."
System.Drawing.Image.FromFile "System.OutOfMemoryException: Out of memory."
我偶尔会遇到这些错误,但我不确定为什么。这段代码每天执行数千次,我每隔一段时间就会遇到这些错误。其中一张图像是 94.9 KB,1024x1024 图像。正在通过 UNC
路径从 Azure File Storage
磁盘读取图像。
System.OutOfMemoryException: Out of memory.
Generated: Sat, 23 Apr 2016 15:09:54 GMT
System.OutOfMemoryException: Out of memory.
at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement)
at System.Drawing.Image.FromFile(String filename)
at Tournaments.ImageHandler.ProcessRequest(HttpContext context) in C:\Development\Exposure\Main\Websites\Tournaments\ImageHandler.ashx.cs:line 64
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
实际代码
using (var image = Image.FromFile(path))
{
}
这似乎解决了我的问题,因为它没有以这种方式引用它。
using (var memoryStream = new MemoryStream(File.ReadAllBytes(path)))
{
using (var image = Image.FromStream(memoryStream))
{
byte[] bytes;
using (var memoryStream1 = new MemoryStream())
{
image.Save(memoryStream1, GetImageFormat(Path.GetExtension(path)));
bytes = memoryStream1.ToArray();
}
}
}
}
private ImageFormat GetImageFormat(string extension)
{
switch (extension.ToLower())
{
case ".png":
return ImageFormat.Png;
default:
return ImageFormat.Jpeg;
}
}
我偶尔会遇到这些错误,但我不确定为什么。这段代码每天执行数千次,我每隔一段时间就会遇到这些错误。其中一张图像是 94.9 KB,1024x1024 图像。正在通过 UNC
路径从 Azure File Storage
磁盘读取图像。
System.OutOfMemoryException: Out of memory.
Generated: Sat, 23 Apr 2016 15:09:54 GMT
System.OutOfMemoryException: Out of memory.
at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement)
at System.Drawing.Image.FromFile(String filename)
at Tournaments.ImageHandler.ProcessRequest(HttpContext context) in C:\Development\Exposure\Main\Websites\Tournaments\ImageHandler.ashx.cs:line 64
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
实际代码
using (var image = Image.FromFile(path))
{
}
这似乎解决了我的问题,因为它没有以这种方式引用它。
using (var memoryStream = new MemoryStream(File.ReadAllBytes(path)))
{
using (var image = Image.FromStream(memoryStream))
{
byte[] bytes;
using (var memoryStream1 = new MemoryStream())
{
image.Save(memoryStream1, GetImageFormat(Path.GetExtension(path)));
bytes = memoryStream1.ToArray();
}
}
}
}
private ImageFormat GetImageFormat(string extension)
{
switch (extension.ToLower())
{
case ".png":
return ImageFormat.Png;
default:
return ImageFormat.Jpeg;
}
}