我打算在我的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并在执行此操作之前删除内存)
答案 0 :(得分:4)
列表会自动调整缓冲区大小,因此创建新列表并丢弃旧列表毫无意义。如果您事先知道最终大小,则可以设置列表容量 - 这将通过使缓冲区仅根据您的需要大小来节省内存。如果大小的增加太大以至于涉及多个调整大小/复制操作,它还将节省CPU时间 - 您的代码只需要一次操作。
如果您对C ++更熟悉,C#List
类与C ++ vector
的工作方式几乎相同。在每一个中,缓冲区每增加一倍就会加倍。
AddRange
会自动将列表大小增加到正确的数字,而不是在添加元素期间增加多次,就像您逐个添加一样。
简而言之,不要担心,如果方便的话,请使用AddRange
,如果事先知道,请设置列表容量。
如果您想查看C#源代码,这些是分析容器性能的最重要的类:Enumerable,List。