c# - .net List<T> 修剪多余的部分

标签 c# collections garbage-collection dynamic-memory-allocation

考虑这种情况:Form1 构建了一个包含大量元素的 List 对象。然后,它必须通过参数将此集合传递给 Form2。

在 Form2 中制作硬拷贝后,我想清除与 Form1 中的集合相关的所有内容。让 Col1 成为 Form1 中集合的标识符。

因为 Col1 是通过参数通过引用传递的,所以我调用 Col1.Clear() 来清除它的元素,然后调用 Col1.TrimExcess() 来将其实际大小减小为 0,因此它不会跟踪大量的 null 值。

我的意图是尽快清除所有使用的内存。 Col1.TrimExcess() 应该清除所有使用的内存,但我很好奇 Col1 = null 在我的(或大多数)情况下是否会更好?

最佳答案

我想调用 Col1.Clear() 来清除它的元素,然后调用 Col1.TrimExcess() 将是一种更好的方法,因为 Col1 = null 只会取消引用列表,但它仍会保留在内存中,直到 GC 完成它的工作。

调用 Col1.Clear() 将从列表本身取消引用列表的项目,然后 Col1.TrimExcess() 将从列表中删除所有空元素。

所以这样它将删除内存中所有内容的引用。

希望对你有帮助

关于c# - .net List<T> 修剪多余的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11505968/

相关文章:

django - 外键和 Django 模板

来自 XML 的 C# 类定义

c# - 从更大的 JSON 字符串中检索所需的字符串

java - 如何在 Spring 中将 AutopopulatedList<ChildClass> 引用到 List<AbstractBaseClass> ?

java - Map.containsValue() 返回 false

memory-management - 释放 Java 堆空间

java - 是否可以通过指定 Gcflags来修复 OutOfMemory 错误?

c# - VS C# 中的依赖 hell ,找不到依赖项

c# - 如何计算信号的过零率?

c# - 为什么 EF Core 2.2.6 不进行垃圾收集?