这是我转换图像的代码,所有功能/方法都正常工作。转换图像时出现内存不足异常
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++;
}
}
我一直在得到一个内存不足的例外,虽然我有大量的RAM /内存在我的电脑上。 我的固态硬盘和32GB内存已超过60 GB,但仍然遇到内存不足异常。什么可能导致问题?在我做的测试中,我只转换了小于6MB的图片。 顺便说一下,Files是一个包含文件夹中所有文件路径的列表。 而目标是在别处声明的全局变量。
你已经尝试过在图像上完成后调用'Dispose'?顺便说一句,你可以得到'OutOfMemoryException'而不会接近实际的内存限制。 – BradleyDotNET
不,我没有,我不熟悉Dispose方法..对不起,如果我是“Noob”。我如何调用方法,我应该在哪里调用它? – Bodokh
这实际上很可能是一个无效的参数,而不是真正的OOM。 GDI +(它是System.Drawing的基础)喜欢这样做。例如,如果您的宽度/高度参数为负值,如果目标/源矩形位于图像之外,...所有这些都会导致OOM异常。 – CodesInChaos