C# OutofMemoryException-加载超大图像

C# OutofMemoryException-加载超大图像,c#,large-files,out-of-memory,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 } 现在我明白了这个

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

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

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

    Image i = Bitmap.FromFile(largeimage); // OutofMemoryException was unhandled
}
现在我明白了这个问题与我有多少物理内存无关,而是一个寻址限制。我能做些什么来绕过这个限制吗

该图像确实有效,在Photoshop(虚拟机大小:916MB)和ACDSee中可以很好地打开。 此外,由于所列出的尺寸不准确,也不必用谷歌搜索尺寸


谢谢您的时间。

操作系统无法分配连续的内存量。你所能做的就是使用和捕获内存不足的异常。 但这只会让你免于应用程序崩溃。
至于我,要打开这么大的文件,你应该使用二进制读取器,并通过System.Drawing绘制一个文件


下面是一个很好的问题和答案

位图类需要大约1.5GB的内存来保存该实例。NET内存分配器通常在1GB标记附近阻塞

我以前碰到过这个。据我所知,这是一个框架。这是一幅大图。不幸的是,框架位图类不能满足您的需要。您可能会发现,采用分块的方法,即您自己封送位图头并将像素采样到更易于管理的图像维度中,这是最佳选择。不过,这是一个挑战,因为它涉及到一点车轮重建。如果Photoshop和ACDSee将整个未压缩图像加载到内存中,我会感到惊讶。操作系统可以这样做(如果是64位操作系统),但.NET framework不能(即使是64位操作系统)。