我遇到的问题是我将文件加载到位图中,获取我需要的图像属性然后处理位图。
foreach (string file in fiList)
{
newImage = new imageInfo();
newImage.OrigName = currFile.Name;
newImage.Location = currFile.FullName;
newImage.NewName = cleanFileName(newImage);
newImage.ManualNameChange = false;
newImage.Type = type;
newImage.Size = Math.Round(sizeInMB, 2) + " KB";
newImage.LastModified = currFile.LastWriteTime;
newImage.CreateDate = currFile.CreationTime;
tmpImage = Bitmap.FromFile(currFile.FullName);
newImage.DPI =
(int)Math.Ceiling(tmpImage.HorizontalResolution);
newImage.Width = tmpImage.Width;
newImage.Height = tmpImage.Height;
newImage.PixelFormat = tmpImage.PixelFormat.ToString();
tmpImage.Dispose();
...
}
我一直收到OutOfMemory错误,但是在运行内存分析器时,应用程序只使用它可以分配的200GB的1.4GB。我查看了图像,这个文件只有64MB的jpg,所以即使转换成位图后,也不应该消耗掉1.2GB的大部分内容。错误发生在Bitmap.FromFile
方法创建tmpImage
为什么当我还有足够的内存要分配时,我会得到一个OutOfMemory异常?
答案 0 :(得分:-1)
在进行一些挖掘之后,这实际上与程序的内存分配无关。此问题实际上是由于尝试将损坏的图像加载到内存中。由于某种原因,当图像损坏时,这会导致抛出OutOfMemory异常。这有点误报。