【发布时间】:2012-07-15 09:34:05
【问题描述】:
考虑这种情况:Form1 构建了一个包含大量元素的 List 对象。然后,它必须通过参数将这个集合传递给 Form2。
我想在 Form2 中制作一个硬拷贝后清除与 Form1 中的集合相关的所有内容。让 Col1 成为 Form1 中集合的标识符。
由于 Col1 是通过参数通过引用传递的,我调用 Col1.Clear() 来清除它的元素,然后调用 Col1.TrimExcess() 到将其实际大小减小到 0,因此它不会跟踪大量 null 值。
我的目的是尽快清除所有使用过的内存。 Col1.TrimExcess() 应该清除所有使用的内存,但我很好奇 Col1 = null 在我(或大多数)情况下是否会更好?
【问题讨论】:
-
我不明白为什么你想传递一个巨大的集合只是为了清除它“使用”的地方。请注意,传递引用并不意味着创建了副本。
-
你能举个真实的例子吗?你的问题有点抽象。
-
Col1 = null肯定比Col1.Clear()+Col1.TrimExcess()快(List(T).Clear和List(T).TrimExcess是 O(n) 操作)。 -
@Tim Schmelter - 你是对的。这就像建造一辆卡车来运输东西,但不是使用你刚刚建造的卡车,而是建造另一辆相同的卡车并摧毁第一辆。感谢您阐明我的逻辑缺陷 :) 现在我也在考虑放弃额外的表单并在第一个表单中使用标签。
标签: c# collections garbage-collection dynamic-memory-allocation