2015-09-05 47 views
9

我對內存問題很陌生。希望你不要以爲這是一個愚蠢的問題。C#中等大小集合中的大對象

我知道,內存更大的超過85000個字節會在C#中被放入蕙 即

Byte[] hugeByteCollection = new Byte[85000]; 

我不知道是否有大小10000集 - 20000與包含10個成員變量的對象(字節類型)將被放入LOH還是SOH?

回答

4

對象數組的大小是指針大小乘以對象的數量。這是因爲只有值類型存儲在數組本身中,引用類型(對象)將被存儲在其他地方並且不會計入數組的大小。因此,85000/4 = 21250個對象和85000/8 = 10625個對象可以分別存儲在32位和64位模式的SOH陣列中。

編輯: 感謝Hans Passant指出,這假定所使用的集合類型是一個數組而不是一個列表。爲了避免太多的分配,列表將自己調整大於內容。有關詳細信息,請參見this link

+1

這種數學算法對收集類型不起作用,實際上是16,384。查看[這個答案](http://stackoverflow.com/a/2248188/17034)瞭解詳情。 –

+0

感謝您的評論!你所說的調整大小隻適用於列表,而不是數組,因此與這個問題沒有直接關係。但是,我仍然應該添加警告 –

+0

,以便將包含大量對象的列表保留在SOH中 我們需要提出一個包含列表數組的分區列表。 partitionList將動態創建一個新的列表並添加到arry當列表超過10000的容量時 這是否會工作? – cscmh99