.net做ArrayList.Clear释放内存?

时间:2010-01-13 20:04:24

标签: c# .net arraylist

我有一个人口稠密的arraylist,我想清除和重用。如果我清除它会释放以前使用过的内存吗?

我还应该提一下,arraylist是一个类的私有只读字段,在我第一次使用arraylist之后仍然有很多活跃的工作要做。所以我不能等到课后超出范围的垃圾收集。

Clear方法足够快吗?或者我应该销毁并创建一个新的arraylist?

问题更新:

如果我有这样的字段声明(感谢Jon的建议)

    /// <summary>
    /// Collection of tasks.
    /// </summary>
    private List<Task> tasks = new List<Task>();

然后我填充它....(重)

现在,如果不是清除和修剪,我可以打电话:

tasks = new List<Task>(); 

这会被推荐吗?

2 个答案:

答案 0 :(得分:16)

以更好的方式表达您的意图。你实际上想要一个新的清单吗?如果是这样,请创建一个新的。如果您在概念上想要重复使用相同的列表,请致电Clear

ArrayList的文档确实声明Clear保留了原始容量 - 所以你仍然会有一个大数组,但它将充满空值而不是引用前面的元素:

  

Capacity保持不变。重置   调用ArrayList的容量   TrimToSize或设置Capacity   财产直接。修剪一个空的   ArrayList设置了容量   ArrayList为默认容量。

顺便说一下,您使用ArrayList而不是List<T>的原因是什么?

答案 1 :(得分:3)

如果您希望内存实际上是空闲的,请将其设置为null并调用垃圾收集器。然后创建一个新的ArrayList。如果将其设置为null然后创建一个新的,则在需要额外内存时最终会收集垃圾。另外,我是第二个通用集合。自从我使用ArrayList以来已经很久了。