Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 垃圾收集会处理列表列表的值吗_C#_List_Dictionary_Garbage Collection - Fatal编程技术网

C# 垃圾收集会处理列表列表的值吗

C# 垃圾收集会处理列表列表的值吗,c#,list,dictionary,garbage-collection,C#,List,Dictionary,Garbage Collection,如果列表位于对象扩展列表内,并且在清除字典后该对象位于字典内,则将释放列表的垃圾收集值。还是我必须清除每个列表 我希望这个问题听起来不要太复杂。我试着阅读C#中的垃圾收集是如何工作的,它似乎说它可以处理一切(字面意思),但我想确定一下。 我还试图找出是否有人有同样的问题,但我发现的问题并不涉及词典 编辑:所以,我重新阅读了有关垃圾收集的信息,它似乎真的能解决所有问题。有人能证实我只是对内存泄漏有点偏执吗。我也知道我可以测试内存泄漏,但是为什么,如果有人已经有了答案。简短的答案是是 清除词典中的项

如果列表位于对象扩展列表内,并且在清除字典后该对象位于字典内,则将释放列表的垃圾收集值。还是我必须清除每个列表

我希望这个问题听起来不要太复杂。我试着阅读C#中的垃圾收集是如何工作的,它似乎说它可以处理一切(字面意思),但我想确定一下。 我还试图找出是否有人有同样的问题,但我发现的问题并不涉及词典


编辑:所以,我重新阅读了有关垃圾收集的信息,它似乎真的能解决所有问题。有人能证实我只是对内存泄漏有点偏执吗。我也知道我可以测试内存泄漏,但是为什么,如果有人已经有了答案。

简短的答案是

清除词典中的项目时,每个(列表)项目的引用计数将减少一。对于每个引用计数现在为零(没有其他引用)的对象,该对象都有资格进行垃圾收集。在它本身被垃圾收集之后,对(列表)中每个基础项的引用计数将依次减少1,并且相同的过程将重复

作为特例,垃圾收集器中可能还有其他优化来处理列表中的项,但是概念模型应该与上面的描述保持一致


关于垃圾收集的一般警告仍然适用,并且更可能是内存泄漏的来源。例如,如果列表中的项保留着一个资源,比如一个开放的数据库连接(实际上是实现IDisposable的任何东西),那么您需要确保在放弃引用之前对每个项显式调用“Dispose”

我发现的问题也与垃圾收集无关。垃圾收集器负责清除任何移出范围的对象,意味着没有对这些对象的引用。除非您注意到任何内存泄漏,否则将其留给GC处理。您不需要清除它。GC将查找并释放对象图中无法遍历的任何对象。好的,谢谢。这也很有道理。欢迎来到Stack Overflow,回答得很好!;)这比Microsoft页面本身解释得更好。谢谢