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选项,我在任务管理器中看不到任何内存峰值.
我怎样才能避免这个错误?
100000000000 bools意味着~93 GB的内存.您只有@ 50 GB(包括默认分配的虚拟内存).
将它们存储为位(而不是字节),可以降低到~12GB.
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |