OutofMemoryException - 加载超大图像

时间:2010-08-24 04:47:43

标签: c# large-files out-of-memory

我正在尝试加载一个非常大的图像(14473x25684),但我遇到了内存限制。

这是一个简单的程序来演示这个问题:

static void Main(string[] args)
{
    string largeimage = @"C:\Temp\test_image.jpg"; // 14473x25684

    Image i = Bitmap.FromFile(largeimage); // OutofMemoryException was unhandled
}

现在我明白这个问题与我拥有多少物理内存无关,而是一个寻址限制。我能做些什么来解决这个限制吗?

图像确实有效,它在Photoshop(VM大小:916MB)和ACDSee中打开很好。 此外,不要因为列出的尺寸不准确而对Google的尺寸感到烦恼。 :)

感谢您的时间。

2 个答案:

答案 0 :(得分:4)

Bitmap类需要大约1.5GB的内存才能容纳该实例。 .NET内存分配器通常会在1GB标记附近窒息。

答案 1 :(得分:0)

操作系统无法分配连续的内存量。您可以做的就是使用MemoryFailPoint并捕获InsufficientMemoryException。 但这只会让你免受应用程序崩溃的影响 至于我,要打开这么大的文件,你应该使用二进制阅读器并通过System.Drawing绘制一个文件。

这里有很好的问题和答案When is it OK to catch an OutOfMemoryException and how to handle it?