2012-01-22 43 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

由于您将存储多个对同一对象的引用,所以开销不大。该列表仅存储对您添加的对象的引用,对象本身将分配到其他位置。由于您多次添加相同的对象,它们将全部指向堆上的同一对象,并且唯一的开销将是引用本身。