C# 当我上载超过20MB的图像时System.OutOfMemoryException
我上传的图像超过20 MB,是正确上传图像的2到3倍,但在执行5到6次以上的上传后,它会出现错误,之后它可以正常工作,但不允许保存超过1MB的图像 在手术室下面睡觉C# 当我上载超过20MB的图像时System.OutOfMemoryException,c#,asp.net,memorystream,C#,Asp.net,Memorystream,我上传的图像超过20 MB,是正确上传图像的2到3倍,但在执行5到6次以上的上传后,它会出现错误,之后它可以正常工作,但不允许保存超过1MB的图像 在手术室下面睡觉 在base64字符串中转换图像 将base64字符串转换为字节 byte[]imageBytes=Convert.FromBase64String(base64Sting) 从该imagebytes中,我尝试使用graphics.DrawImage()根据高度和宽度以及XY坐标裁剪图像 但它给了我一个错误 内存不足。 在System
base64字符串中转换图像
base64字符串
转换为字节
byte[]imageBytes=Convert.FromBase64String(base64Sting)代码>
imagebytes
中,我尝试使用graphics.DrawImage()根据高度和宽度以及XY坐标裁剪图像
但它给了我一个错误
内存不足。
在System.Drawing.Image.FromStream(Stream Stream,Boolean useEmbeddedColorManagement,Boolean validateImageData)中
在System.Drawing.Image.FromStream(Stream)中
但它给出了一个错误
System.Drawing.Image=System.Drawing.Image.FromStream(ms)
将图像转换为基64字符串将显著增加内存需求。20MB可能需要60-80MB或更多。难怪你有问题。您需要重新思考您执行此操作的方式“i)转换base64String中的图像”-这里的图像是什么形式?所有这些转换真的是必要的吗?您正在正确地处理(使用
),但GDI+泄漏可能会导致所描述的行为,即它对前几个大泄漏有效,然后不再有效。当然,base64编码不必要地膨胀操作是正确的,但它应该是可重复的。使用内存分析器。是转换base64String中的图像:是,这是图像,我正确地使用变量处理了所有图像。
using (MemoryStream ms = new MemoryStream(imageBytes))
{
using (System.Drawing.Image image = System.Drawing.Image.FromStream(ms))
{
//Operations
}
}