在我对素数的追求中,我已经问过这个问题:Can't create huge arrays这导致我根据数组字典创建我自己的伪数组...:{{1} }
我可以使用下面的代码知道创建很多bool的伪数组(如private Dictionary<int, Array> arrays = new Dictionary<int, Array>();
):
10 000 000 000
但是一旦我要求public class CustomArray
{
private Dictionary<int, Array> arrays = new Dictionary<int, Array>();
public CustomArray(ulong lenght)
{
int i = 0;
while (lenght > 0x7FFFFFC7)
{
lenght -= 0x7FFFFFC7;
arrays[i] = new bool[0x7FFFFFC7];
i++;
}
arrays[i] = new bool[lenght];
}
}
元素的CustomArray,它就崩溃了。它适用于25次首次迭代(我的Dictionary包含25个0x7FFFFFC7元素的数组),但随后它以100 000 000 000
异常崩溃。
剩下的,我有16GB内存,VS2013,该程序是用64位编译的,我启用了OutOfMemory
选项,我没有看到任何内容任务管理器中的内存峰值。
如何避免此错误?
答案 0 :(得分:7)
100000000000 bools意味着~93 GB的内存。您只有@ 50 GB(包括默认分配的虚拟内存)。
将它们存储为位(而非字节),可以降低到~12GB。