创建庞大的字典

时间:2015-06-18 13:05:56

标签: c# arrays dictionary

在我对素数的追求中,我已经问过这个问题: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选项,我没有看到任何内容任务管理器中的内存峰值。

如何避免此错误?

1 个答案:

答案 0 :(得分:7)

100000000000 bools意味着~93 GB的内存。您只有@ 50 GB(包括默认分配的虚拟内存)。

将它们存储为位(而非字节),可以降低到~12GB。

查看System.Collection.BitArray