创建庞大的字典

Tho*_*oub 5 c# arrays dictionary

在我对素数的追求中,我已经问过这样一个问题:无法创建巨大的数组,这些数组导致我基于数组字典创建我自己的假数组类...:private Dictionary<int, Array> arrays = new Dictionary<int, Array>();

我可以10 000 000 000使用下面的代码知道创建很多bool(如)的伪数组:

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];
    }
}
Run Code Online (Sandbox Code Playgroud)

但是一旦我要求CustomArray 100 000 000 000元素,它就崩溃了.它适用于25次首次迭代(我的Dictionary包含25个0x7FFFFFC7元素的数组),但随后它会因OutOfMemory异常而崩溃.

剩下的,我有16GB内存,VS2013,程序是用64位编译的,我启用了gcAllowVeryLargeObjects选项,我在任务管理器中看不到任何内存峰值.


我怎样才能避免这个错误?

And*_*tar 7

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

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

查看System.Collection.BitArray