我有一个人口稠密的arraylist,我想清除和重用。如果我清除它会释放以前使用过的内存吗?
我还应该提一下,arraylist是一个类的私有只读字段,在我第一次使用arraylist之后仍然有很多活跃的工作要做。所以我不能等到课后超出范围的垃圾收集。
Clear方法足够快吗?或者我应该销毁并创建一个新的arraylist?
问题更新:
如果我有这样的字段声明(感谢Jon的建议)
/// <summary>
/// Collection of tasks.
/// </summary>
private List<Task> tasks = new List<Task>();
然后我填充它....(重)
现在,如果不是清除和修剪,我可以打电话:
tasks = new List<Task>();
这会被推荐吗?
答案 0 :(得分:16)
以更好的方式表达您的意图。你实际上想要一个新的清单吗?如果是这样,请创建一个新的。如果您在概念上想要重复使用相同的列表,请致电Clear
。
ArrayList
的文档确实声明Clear
保留了原始容量 - 所以你仍然会有一个大数组,但它将充满空值而不是引用前面的元素:
Capacity
保持不变。重置 调用ArrayList
的容量TrimToSize
或设置Capacity
财产直接。修剪一个空的ArrayList
设置了容量ArrayList
为默认容量。
顺便说一下,您使用ArrayList
而不是List<T>
的原因是什么?
答案 1 :(得分:3)
如果您希望内存实际上是空闲的,请将其设置为null并调用垃圾收集器。然后创建一个新的ArrayList。如果将其设置为null然后创建一个新的,则在需要额外内存时最终会收集垃圾。另外,我是第二个通用集合。自从我使用ArrayList以来已经很久了。