在我追求的素數,我已經問過這個問題:Can't create huge arrays導致我創造我自己的類基於陣列的字典假冒陣列...: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
元素CustomArray的崩潰。它適用於25次第一次迭代(我的字典包含25個0x7FFFFFC7元素數組),但隨後崩潰了一個OutOfMemory
異常。作爲其餘部分,我有16GB內存,VS2013,程序編譯爲64位,我啓用了gcAllowVeryLargeObjects
選項,我在任務管理器中看不到任何內存峯值。
如何避免此錯誤?
爲什麼詞典不是所有的東西?鋸齒陣不會更合適嗎? – Luaan
@Luaan隨機選擇,我在字典的心情... –
也bool不是一種有效的信息存儲類型。你可以簡單地將64個布爾值存儲在一個ulong(8字節)而不是64個布爾數組(64字節)中。 – Andrew