垃圾收集是否会处理列表列表的值

时间:2016-04-01 04:20:02

标签: c# list dictionary garbage-collection

垃圾收集列表的自由值,如果该列表位于扩展List的对象内,并且该对象在清除字典时位于Dictionary内。或者我是否必须清除每个清单?

我希望这听起来不是一个问题太复杂。我试着读一下C#中的垃圾收集是如何工作的,它似乎确实说它会处理所有事情。(字面意思),但我想确定一下。 我也试过发现是否有人有同样的问题,但我发现的问题并没有涉及字典。

编辑:所以,我重新阅读了有关垃圾收集的信息,看起来确实可以解决所有问题。任何人都可以确认我只是偏执内存泄漏。另外我知道我可以测试内存泄漏,但是为什么,如果有人已经有了答案。

1 个答案:

答案 0 :(得分:0)

简短的回答是

清除字典中的项目时,每个(列表)项目的引用计数将减1。对于每个引用计数现在为零(没有其他引用)的对象,该对象将有资格进行垃圾回收。在垃圾收集后,对(列表)中每个基础项的引用计数将依次减少1,同样的过程将重复。

垃圾收集器中可能还有其他优化,可以将列表中的项目作为特殊情况使用,但概念模型应与上述说明保持一致。

关于垃圾收集的常规警告仍然适用,并且更有可能成为内存泄漏的来源。例如,如果列表中的项目持有资源,例如开放数据库连接(实际上是实现 IDisposable 的任何内容),则需要确保明确调用" Dispose& #34;在放弃参考之前在每个项目上。