创建庞大的字典

本文关键字:字典 创建 | 更新日期: 2023-09-27 17:57:08

在我追求素数的过程中,我已经问过这个问题:无法创建巨大的数组,导致我基于数组字典创建自己的假数组类... : 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];
    }
}

但是一旦我要求100 000 000 000元素的自定义数组,它就会崩溃。它适用于 25 次第一次迭代(我的字典包含 25 个0x7FFFFFC7元素数组),但随后它崩溃并出现OutOfMemory异常。

其余部分,我

有16GB内存,VS2013,该程序以64位编译,我启用了gcAllowVeryLargeObjects选项,并且在任务管理器中没有看到任何内存峰值。


如何避免此错误?

创建庞大的字典

100000000000 布尔值表示 ~93 GB 内存。您只有 @50 GB(包括默认分配的虚拟内存)。

将它们存储为位(而不是字节),将使您降低到~12GB。

查看 System.Collection.BitArray