是否值得在C#中调整List的大小?

时间:2017-08-21 04:30:52

标签: c# list

我打算在我的C#程序中使用List。 现在,每当我调用函数makeTemplate时,内容以及列表的大小都会发生变化。我正在考虑调整列表的大小(还没有想过如何做到这一点,我听说AddRange对此可能没问题)但后来我想,为什么不只是创建另一个列表,放弃以前的一,让GC处理。 沿着这些方向的东西

class aClass
{
   private List<float> template;

   public ivoid makeTemplate(size)
   {
      //Here I abandon the previous template hold in some memory and 
      //get some new list
     template= new List<float>(size);
     //.....
   }

}

我认为这样更好,对此有什么看法? (我想在C ++中我必须检查它是否为null并在执行此操作之前删除内存)

1 个答案:

答案 0 :(得分:4)

列表会自动调整缓冲区大小,因此创建新列表并丢弃旧列表毫无意义。如果您事先知道最终大小,则可以设置列表容量 - 这将通过使缓冲区仅根据您的需要大小来节省内存。如果大小的增加太大以至于涉及多个调整大小/复制操作,它还将节省CPU时间 - 您的代码只需要一次操作。

如果您对C ++更熟悉,C#List类与C ++ vector的工作方式几乎相同。在每一个中,缓冲区每增加一倍就会加倍。

AddRange会自动将列表大小增加到正确的数字,而不是在添加元素期间增加多次,就像您逐个添加一样。

简而言之,不要担心,如果方便的话,请使用AddRange,如果事先知道,请设置列表容量。

如果您想查看C#源代码,这些是分析容器性能的最重要的类:EnumerableList