c# – 在.NET列表中设置一个项目为空,使其可用于垃圾收集,这是一个好主意吗? - 代码日志

c# – 在.NET列表中设置一个项目为空,使其可用于垃圾收集,这是一个好主意吗?

假设我有一个大的列表,其中每个项目被处理一次,在长时间的操作期间再次看不到:

List<T> items;
 // ... some stuff is done with the list then finally

 for(int i = 0; i < items.Count; i++)
 {
     SomeOperation(items[i]);
     //items[i] never used again at this point
     // say i do this:
     // items[i] = null;

 }

如果我取消注释项目[i] = null,是否会将索引i上的对象取消,并将其用于垃圾回收?

从内存使用的角度来看,如果在整个列表未被使用的情况下,GC将会更有效地实现。

这是忽略一些问题,如代码稍后更改,事实证明,这些项目后来使用和意外的空的​​破坏破坏。

如果对该对象的唯一根可访问的引用是通过该列表,那么是的,将引用设置为null将使该对象符合垃圾回收的条件。

当垃圾收集最终发生时,如果该对象最终被清理,而列表本身需要保留,那么您将根据该对象的大小减少应用程序的内存占用。

请注意,分配给列表中的对象的内存将仍然存在;它只是它所引用的对象的内存,可以被清理。

正如许多其他人所提到的,您对这种数据结构的使用强烈地表明,您不应该首先使用列表,而应该是使用队列或其他类似的数据结构,因为这样可以更有效地满足您的使用需求。

你还需要记住,记忆是便宜的;人们往往会有很多。除非你有数以千计的物品长期保持活力,否则这不太可能让你更加注意;你甚至可能无法测量差异。使用正确的数据结构将为您提供所有这些好处,并且使代码变得更加简单,更可读/可维护。

http://stackoverflow.com/questions/27801681/does-setting-an-item-null-in-a-net-listt-make-it-available-for-garbage-collec

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 在.NET列表中设置一个项目为空,使其可用于垃圾收集,这是一个好主意吗?