C# 垃圾收集会处理列表列表的值吗
如果列表位于对象扩展列表内,并且在清除字典后该对象位于字典内,则将释放列表的垃圾收集值。还是我必须清除每个列表 我希望这个问题听起来不要太复杂。我试着阅读C#中的垃圾收集是如何工作的,它似乎说它可以处理一切(字面意思),但我想确定一下。 我还试图找出是否有人有同样的问题,但我发现的问题并不涉及词典C# 垃圾收集会处理列表列表的值吗,c#,list,dictionary,garbage-collection,C#,List,Dictionary,Garbage Collection,如果列表位于对象扩展列表内,并且在清除字典后该对象位于字典内,则将释放列表的垃圾收集值。还是我必须清除每个列表 我希望这个问题听起来不要太复杂。我试着阅读C#中的垃圾收集是如何工作的,它似乎说它可以处理一切(字面意思),但我想确定一下。 我还试图找出是否有人有同样的问题,但我发现的问题并不涉及词典 编辑:所以,我重新阅读了有关垃圾收集的信息,它似乎真的能解决所有问题。有人能证实我只是对内存泄漏有点偏执吗。我也知道我可以测试内存泄漏,但是为什么,如果有人已经有了答案。简短的答案是是 清除词典中的项
编辑:所以,我重新阅读了有关垃圾收集的信息,它似乎真的能解决所有问题。有人能证实我只是对内存泄漏有点偏执吗。我也知道我可以测试内存泄漏,但是为什么,如果有人已经有了答案。简短的答案是是 清除词典中的项目时,每个(列表)项目的引用计数将减少一。对于每个引用计数现在为零(没有其他引用)的对象,该对象都有资格进行垃圾收集。在它本身被垃圾收集之后,对(列表)中每个基础项的引用计数将依次减少1,并且相同的过程将重复 作为特例,垃圾收集器中可能还有其他优化来处理列表中的项,但是概念模型应该与上面的描述保持一致
关于垃圾收集的一般警告仍然适用,并且更可能是内存泄漏的来源。例如,如果列表中的项保留着一个资源,比如一个开放的数据库连接(实际上是实现IDisposable的任何东西),那么您需要确保在放弃引用之前对每个项显式调用“Dispose” 我发现的问题也与垃圾收集无关。垃圾收集器负责清除任何移出范围的对象,意味着没有对这些对象的引用。除非您注意到任何内存泄漏,否则将其留给GC处理。您不需要清除它。GC将查找并释放对象图中无法遍历的任何对象。好的,谢谢。这也很有道理。欢迎来到Stack Overflow,回答得很好!;)这比Microsoft页面本身解释得更好。谢谢