转换图像时内存不足异常

时间:2014-06-13 16:01:02

标签: c#

这是我转换图像的代码,所有功能/方法都可以正常工作。

int height=0,width = 0;
        ImageFormat i;
        foreach (string pic in files)
        {
            Image temp = Image.FromFile(pic);
            if (whatisformat() != null)
                i = whatisformat();
            else
                i = GetImageFormat(temp);
            if (sizeselected()!=-1)
            {
                height = sizeselected();
                width = getwidth(height);
            }
            else
            {
                width = temp.Width;
                height = temp.Height;
            }
            Formatresizesave(temp, i, height, width, destination,Path.GetFileName(pic));
            progressBar1.Value++;
        }
    }

虽然我的电脑上有足够的内存/内存,但我仍然会遇到内存异常。 我的SSD和32GB的RAM上有超过60 GB的空闲时间,我仍然遇到内存不足异常。可能导致什么问题?在我做过的测试中,我只转换了不到6MB的图片。 顺便说一下,Files是一个包含文件夹中所有文件路径的列表。 目的地是在其他地方宣布的全球变量。

1 个答案:

答案 0 :(得分:4)

确保您正在构建x64,而不是x86。如果你为x86构建,你的进程将被限制为2GB的RAM,而你有32GB的物理RAM这一事实并不重要。您还应使用Disposeusing每张图片。

    int height=0,width = 0;
    ImageFormat i;
    foreach (string pic in files)
    {
        using (Image temp = Image.FromFile(pic))
        {
            if (whatisformat() != null)
                i = whatisformat();
            else
                i = GetImageFormat(temp);
            if (sizeselected()!=-1)
            {
                height = sizeselected();
                width = getwidth(height);
            }
            else
            {
                width = temp.Width;
                height = temp.Height;
            }
            Formatresizesave(temp, i, height, width, destination,Path.GetFileName(pic));
            progressBar1.Value++;
        }
    }
}