我正在尝试加载一个非常大的图像(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的尺寸感到烦恼。 :)
感谢您的时间。
答案 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?