Dot-Net

.NET 堆棧記憶體限制

  • November 7, 2018

我正在使用 C#、.NET 4.0、64 位。我需要在記憶體中儲存 5 億個用於計算的“數據點”。我需要決定是將它們創建為結構對像還是類對象。結構看起來要快得多。

堆棧有記憶體限制嗎?如果可以,如何調整。

在堆棧上儲存這麼多數據會影響系統的整體性能嗎?

(順便說一句,我知道 .NET 中的單個對像大小限制,因此正在解決這個問題——數據將儲存在多個集合中)。

你問錯問題了。如果堆棧大小很重要,那麼您做錯了什麼。

如果您使用許多數據點,您會將它們放在一個集合中,例如數組。數組總是在堆上分配。結構數組嵌入各個結構並形成連續的記憶體塊。(如果你有超過 2GB,你需要幾個陣列)。

而對於引用類型,數組將只包含引用,並且對像在堆上單獨分配。堆分配有大約 16 個字節的成本,數組中的引用佔另外 8 個字節。

由於間接定址,您還將獲得更差的記憶體局部性,並且 GC 必須做更多的工作來抓取所有這些引用。

我的結論是,如果您有許多小數據點,請將它們設為結構,然後將它們放入數組中。

引用自:https://stackoverflow.com/questions/9749453