2012-01-22 41 views
7

實例化一個列表(因此忽略與創建列表相關的開銷)之後,將同一對象反覆添加到列表的內存成本是多少?我相信以下內容只是將相同的指針內存添加到列表中,因此這個列表實際上並不佔用大量內存。有人可以證實是這樣嗎?重複對象列表 - 內存成本是多少?

List<newType> list = new List<newType>(); 

newType example = new newType(); 

for (int i = 0; i < 10000; i++) 
{ 
    list.Add(example); 
} 

(讓我們假設一個新的NEWTYPE佔用更多的內存比一個指針做了相當大的量)

編輯

NEWTYPE是一類。對不起,沒有澄清。

回答

5

這取決於newTypeclass(參考類型)還是struct(值類型)。你的解釋對於引用類型是正確的,但是值類型是完整複製的,所以當你添加元素到列表中時,列表將隨你的值類型的大小而增長。還要注意,列表增長將不會與元素添加一致,因爲內部List以塊爲單位分配內存,期望容納更多元素。

+0

請參閱我的編輯。雖然謝謝! – carlbenson

+0

@CarlBenson然後你是對的 - 看看Andrew Hare對發生了什麼的很好的解釋。 – dasblinkenlight

2

由於您將存儲多個對同一對象的引用,所以開銷不大。該列表僅存儲對您添加的對象的引用,對象本身將分配到其他位置。由於您多次添加相同的對象,它們將全部指向堆上的同一對象,並且唯一的開銷將是引用本身。