【问题标题】:List with repeat objects - What is the memory cost?带有重复对象的列表 - 内存成本是多少?
【发布时间】:2012-01-22 02:41:54
【问题描述】:

在实例化一个列表之后(因此忽略与创建列表相关的开销),一遍又一遍地将相同对象添加到列表中的内存成本是多少?我相信下面只是一遍又一遍地将相同的指向内存的指针添加到列表中,因此这个列表实际上并没有占用很多内存。有人可以确认是这样吗?

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

newType example = new newType();

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

(让我们假设一个新的 newType 比指针占用更多的内存)

编辑

newType 是一个类。很抱歉没有澄清这一点。

【问题讨论】:

    标签: c# .net list pointers reference


    【解决方案1】:

    这取决于newTypeclass(引用类型)还是struct(值类型)。您对引用类型的解释是正确的,但是值类型是完整复制的,因此当您向列表中添加元素时,列表将随着值类型的大小而增长。另请注意,列表增长不会与元素添加一致,因为在内部 List 以块的形式分配内存,期望容纳更多元素。

    【讨论】:

    • @CarlBenson 那么你是对的 - 请参阅 Andrew Hare 对正在发生的事情的出色解释。
    【解决方案2】:

    由于您将存储对同一对象的多个引用,因此开销很小。该列表仅存储对您添加的对象的引用,对象本身分配在其他地方。由于您多次添加同一个对象,它们都将指向堆上的同一个对象,唯一的开销将是引用本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 2015-03-29
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多