C# 当我上载超过20MB的图像时System.OutOfMemoryException

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

我上传的图像超过20 MB,是正确上传图像的2到3倍,但在执行5到6次以上的上传后,它会出现错误,之后它可以正常工作,但不允许保存超过1MB的图像

在手术室下面睡觉

  • 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
        }
    }