代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

.NET是否执行ArrayList.Clear释放内存?

  •  7
  • JL. Hans Passant  · 技术社区  · 15 年前

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

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

    清晰的方法足够快吗?或者我应该销毁并创建一个新的数组列表?

    问题更新:

    如果我有这样的声明(感谢乔恩的建议)

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

    然后我填充它……(沉重地)

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

    tasks = new List<Task>(); 
    

    建议这样做吗?

    2 回复  |  直到 14 年前
        1
  •  16
  •   Jon Skeet    15 年前

    无论哪一个表达你的意图更好。你…吗 事实上 想要新的列表吗?如果是,创建一个新的。如果您在概念上想重用同一个列表,请调用 Clear .

    文件 ArrayList 声明说 Clear 保留原始容量-这样您仍然有一个大数组,但它将充满空值,而不是引用前面的元素:

    Capacity 保持不变。重置 的容量 数组列表 ,呼叫 TrimToSize 或设置 容量 直接属性。修剪一个空的 数组列表 设置的容量 数组列表 到默认容量。

    你用什么理由 数组列表 而不是 List<T> 顺便说一句?

        2
  •  3
  •   Nate    15 年前

    如果您希望内存实际上是空闲的,那么将其设置为空并调用垃圾收集器。然后创建一个新的数组列表。如果您将其设置为空,然后创建一个新的,那么当需要额外的内存时,它最终将被垃圾收集。另外,我是第二个通用集合。我用阵列列表已经很久了。