大数组C#OutOfMemoryException

时间:2011-04-26 14:30:25

标签: c# out-of-memory

对于我在C#中的编程练习,我试图创建一个long的数组, 长度为0x1fffffff(base10中为536,870,911),但是我得到了System.OutOfMEmoryException。

对于构建,我针对x64系统,我在Windows7 x64上运行VisualStudio2008,内存为8GB。 它应该是数组的足够内存(它适用于JDK x64和CPP项目)

有什么想法吗?

        const long MAX = 0x1fffffff; // 536870911 in base10
        program.arr = new long[MAX];
        for (long i = 0; i < MAX; i++)
        {
            program.arr[i] = i;                
        }

3 个答案:

答案 0 :(得分:25)

CLR不支持任何大小超过2GB的单个对象。你要的是一个4,294,967,288字节的数组 - 超过支持的两倍。

您可以使用那么多内存,但不能在单个对象(例如数组)中使用。

答案 1 :(得分:5)

很难推荐任何有意义的选择,因为你没有陈述你想要达到的目标,只是你不能做的事情。

如果你确实需要一些快速连续的视图来查看大于2GB的扁平地址空间,你可以使用MemoryMappedFile

如果你在这块内存中指出是什么,为什么地址空间本身必须是连续的(例如你是否将指针传递给非托管代码)会有所帮助以及它为什么需要平面寻址。

答案 2 :(得分:0)

制作Array的子​​集然后填充数组

yourary []

masterarray []&lt; ------将youraray []填充到2gb缓冲区然后将其添加到masterarray中