创建庞大的字典
本文关键字:字典 创建 | 更新日期: 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