簡體   English   中英

鋸齒狀數組 OutOfMemoryException

[英]Jagged array OutOfMemoryException

我正在嘗試為數據挖掘算法初始化一個 120 000 x 4600 的鋸齒狀數組,但我有一個OutOfMemoryException異常

double[][] array = new double[120000][];
for (int i = 0; i < array.Length; i++)
{
    array[i] = new double[4600];
}

它在i大約 49 000 時拋出

我知道 .Net 每個對象限制為 2GB,但我認為這里的數組將是一個雙精度數組的地址列表。 所以它不會是一個大的單一對象。

我認為這就是為什么 Jon Skeet 在大數組聲明時為這個問題OutOfMemoryException建議一個鋸齒狀數組

我不認為我理解他的回答。

它是一個大對象嗎,如果不是為什么會拋出異常。

謝謝

如果它是 32 位應用程序,您正確地得到OutOfMemoryException 對於此大小要求,您需要以 X64 為目標。

在 i = 49000 時,總內存 = 49000*4600*8 = 1803200000 字節 = ~1.68GB。

現在對於 32 位應用程序(針對 X86),應用程序可用的總用戶內存為 2GB(除非應用程序支持大地址感知.NET 應用程序 - 大地址感知和操作系統也為此啟用。 例如:(for)Vista . 然后是一些 CLR 開銷,然后是應用程序開銷。

在 i = 120000 時,您需要總內存為總內存 = 120000*4600*8 = 1803200000 字節 = ~4.11GB。 (平台目標應該是X64)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM