2012-01-22 27 views
7

Bir liste oluşturduktan sonra (bu nedenle liste oluşturma ile ilgili ek yükü göz ardı ederek), aynı nesneyi listeye tekrar eklemenin bellek maliyeti nedir? Aşağıdakilerin aynı listeyi tekrar tekrar belleğe eklediğine inanıyorum ve bu yüzden bu liste aslında çok fazla bellek almıyor. Birisi böyle olduğunu onaylayabilir mi?Tekrarlanan nesnelerle listeleme - Bellek ücreti nedir?

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

newType example = new newType(); 

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

DÜZENLEME

newtype bir sınıftır (en yeni newtype daha bir işaretçi yaptığından daha belleğin önemli miktarda kaplıyor olduğunu varsayalım). Bunu açıklamadığım için üzgünüm.

cevap

5

Bu, newType'un class (başvuru türü) veya struct (bir değer türü) olup olmamasına bağlıdır. Açıklamanız referans türleri için doğrudur, ancak değer türleri tamamen kopyalanır, böylece liste öğeleri ekledikçe liste değer türünüzün boyutuna göre büyür. Ayrıca, liste oluşturmanın öğe eklemeleriyle tek tip olmayacağını da unutmayın, çünkü dahili olarak List, belleği daha fazla öğe barındırmayı bekleyerek parçalara ayırır.

+0

Lütfen düzenlememe bakın. Yine de teşekkürler! – carlbenson

+0

@CarlBenson O zaman haklısınız - Andrew Hare'ın neler olup bittiğine dair mükemmel bir açıklamasını görün. – dasblinkenlight

2

Aynı nesnelere birden çok referansı depolayacağınız için küçük bir yük olacaktır. Liste yalnızca eklediğiniz nesnelerin referanslarını saklar, nesnelerin kendileri başka bir yere tahsis edilir. Aynı nesneyi birden çok kez eklediklerinden, hepsi de öbekte aynı nesneyi gösterecek ve tek başına yük referansların kendileri olacaktır.