我正在尝试为数据挖掘算法初始化一个120 000 x 4600的锯齿状数组,但我有一个OutOfMemoryException
异常
double[][] array = new double[120000][];
for (int i = 0; i < array.Length; i++)
{
array[i] = new double[4600];
}
当i
大约是49 000 时,它会抛出
我知道.Net每个对象限制为2GB,但我认为这里的数组是一个double数组的地址列表。所以它不会是一个大的单一对象。
我认为这就是为什么Jon Skeet为这个问题建议了一个锯齿状的阵列 OutOfMemoryException on declaration of Large Array
我认为我不理解他的回答。
它是一个大对象,如果它不是为什么会抛出异常。
谢谢
答案 0 :(得分:2)
如果是32位应用程序,您正好得到OutOfMemoryException
。对于此大小要求,您需要以X64为目标。
在i = 49000, 总内存= 49000 * 4600 * 8 = 1803200000字节= ~1.68GB。
现在对于32位应用程序(针对X86),应用程序的总用户内存为2GB(除非应用程序为Large address aware,.NET application - Large Address Aware并且还为此启用了操作系统。{{3然后有一些CLR开销,然后是应用程序开销。
在i = 120000时,你需要总内存为 总内存= 120000 * 4600 * 8 = 1803200000字节= ~4.11GB。 (平台目标应为X64)