如何在 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 才能 运行 以上内容。
我使用 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 才能 运行 以上内容。