如何在C#中声明大小为100000×100000的2D整数数组?

时间:2015-07-25 03:04:12

标签: c# arrays memory-management multidimensional-array out-of-memory

我尝试使用VS 2013.我得到一个例外说"未处理的类型' System.OutOfMemoryException'发生在byteArray.exe" (我使用byte而不是int)     。     

null

enter image description here

2 个答案:

答案 0 :(得分:2)

10万次100,000字节需要大约10GB的空间,你不太可能在32位操作系统中分配它,在那里你只限于4G地址空间(还有其他的东西也将使用它。)

即使您的堆可以处理(并且可能在64位操作系统中),您也应该非常仔细地考虑它。

相反,您可能需要考虑其他选项,例如磁盘存储,只根据需要引入所需的选项。这可以像内存映射10G文件一样简单,让操作系统根据需要处理它与磁盘的分页。

或者,根据您的实际需求(而不是满足这些需求的特定实现),可能还有其他方式。

答案 1 :(得分:1)

如果使用.net 4.5或更高版本的视觉工作室。您可以将程序构建平台目标设置为x64。

然后在App.Config文件中包含以下内容。

<runtime>
    <gcAllowVeryLargeObjects enabled="true"/>
</runtime>

以上将允许您使用这样的锯齿状数组,是的,它将使用10GB的内存。

        byte[][] array = new byte[100000][];
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = new byte[100000];
        }

编辑:正如paxdiablo所说,不应该使用它,因为应该有更好的方法来完成你正在尝试的东西。您还需要64位操作系统才能运行上述操作系统。