我试图加载一个非常大的图像(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中可以很好地打开。也不要费心在谷歌上搜索尺寸,因为列出的尺寸不准确。:)
谢谢您抽时间见我。
发布于 2010-08-24 12:53:13
Bitmap类将需要大约1.5 of的内存来容纳该实例。.NET内存分配器通常在1 1GB标记附近阻塞。
发布于 2010-08-24 12:52:21
操作系统无法分配连续的内存量。对此您所能做的就是使用MemoryFailPoint和catch InsufficientMemoryException。但这只会让你避免应用程序崩溃。
对我来说,要打开这么大的文件,你应该使用二进制阅读器并通过System.Drawing绘制一个文件。
这是一个很好的问答When is it OK to catch an OutOfMemoryException and how to handle it?
https://stackoverflow.com/questions/3553637
复制相似问题