Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 图像旋转存储器错误_C#_Asp.net_Image - Fatal编程技术网

C# 图像旋转存储器错误

C# 图像旋转存储器错误,c#,asp.net,image,C#,Asp.net,Image,我在C#中使用了一个简单的Image.RotateFlip()方法,但我一直收到一个错误,说“内存不足”。我通过探查器运行它,发现它发生在System.Drawing.Image.FromFile()上 这是我的密码: protected void rotatePic(object sender, EventArgs e) { ImageButton img = sender as ImageButton; string url = img.ImageU

我在
C#
中使用了一个简单的
Image.RotateFlip()
方法,但我一直收到一个错误,说“内存不足”。我通过探查器运行它,发现它发生在System.Drawing.Image.FromFile()上

这是我的密码:

 protected void rotatePic(object sender, EventArgs e)
    {
        ImageButton img = sender as ImageButton;
        string url = img.ImageUrl.Split('?')[0];

        System.Drawing.Image pic = System.Drawing.Image.FromFile(Server.MapPath(url));
        pic.RotateFlip(System.Drawing.RotateFlipType.Rotate270FlipNone);
        pic.Save(Server.MapPath(url));
        pic.Dispose();
        img.ImageUrl = img.ImageUrl + "?" + DateTime.Now.ToString();
    }

你的问题缺乏很多相关信息。第一;图像有多大。第二,如何调用此代码。经常打电话吗?您什么时候在
pic
上调用
Dispose()
?实现
IDisposable
,因此您的代码应该(可能)如下所示:

using(var pic = System.Drawing.Image.FromFile(Server.MapPath(url)))
{
    pic.RotateFlip(System.Drawing.RotateFlipType.Rotate270FlipNone);
    pic.Save(Server.MapPath(url));
}

如果你多次这样做,你不应该忘记处理()你的图像。

图像有多大?@Quibblesome它们总是不同,但最大的在4MB以下。很可能OOM是真的。也就是说,您正在运行OOM,特别是如果Ed S是正确的,并且您没有正确处理图像。最好的方法是附加.NET内存分析器并检查堆(如果在代码中不明显的话)。虽然我在System.Drawing中遇到过不正确的OOM,但它们通常在操作系统定制较差的移动设备上出现。因此,在认为API可能有问题之前,先对其进行分析,并对代码进行三次检查。是的,一个好的内存分析工具可以让您在遇到OOM情况时的生活变得更加轻松。我喜欢红门蚂蚁档案。它有一个免费试用版。我会尝试使用它。@StørmShadøws:仍然没有回答这些问题:“第一,图像有多大。第二,这个代码是如何调用的。”另外,使用
using
语句。如果
RotateFlip
Save
抛出,则不调用
Dispose()
。图像大小因上载到服务器而不同。图像的最大大小为4MB。正在对图像单击调用代码。@StørmShadøws:好的,在某些图像中这种情况更常见吗?您确定没有太频繁地调用此代码吗?通过已经执行的调试,您有没有收集到任何有用的信息?调用它的机会非常少,被调用的几率是250张图片中的1张。我尝试了上面的代码,但仍然出现此错误,即使使用pic.Dispose();我补充说,但这被称为的几率是每250张图片中就有一张。所以我相信这不是问题所在。