如何在 C# 中声明大小为 100000 x 100000 的二维整数数组?

How can I declare a 2D integer array of size 100000 by 100000 in C#?

我使用 VS 2013 尝试过这个。我得到一个异常提示 "An unhandled exception of type 'System.OutOfMemoryException' occurred in byteArray.exe"(我使用字节而不是整数) . .

static void Main(string[] args)
  {
  byte[,] a = new byte[100000, 100000];
  for(int i=0;i<100000;i++)
        {
            for(int j=0;j<100000; i++)
            {
                Console.Write(0+" ");
            }
        }
    }

100,000 倍 100,000 字节将需要大约 10GB space,您不太可能能够在 32 位 OS 中分配它,您只能使用 4G 地址space(还有 其他 东西也将使用它)。

即使你的堆 可以 处理它(并且在 64 位 OS 中可能是可能的),你应该非常仔细地考虑它。

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

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

如果使用带有 .net 4.5 或更高版本的 visual studio。您可以将程序构建平台目标设置为 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 位 OS 才能 运行 以上内容。