首页 > 解决方案 > C# 垃圾收集器会释放这些对象吗?

问题描述

我正在从节点制作一个树形图(我有一个自定义节点类),并且在某些时候,我想破坏整个树以开始一个新的。节点存储指向其父母和孩子的指针。我还将根节点显式存储在变量中。据我了解,如果我删除对根节点的引用,我将无法再访问任何节点。

所以,我的问题是,如果我删除根节点引用,垃圾收集器会删除所有节点吗?它们确实有彼此的指针,但在这种情况下,我看不到任何可以访问它们的方式。

标签: c#garbage-collection

解决方案


所以,我的问题是,如果我删除根节点引用,垃圾收集器会删除所有节点吗?它们确实有彼此的指针,但在这种情况下,我看不到任何可以访问它们的方式。

最终:是的。

GC 可以在没有“对应用程序根的完整强引用链”的情况下收集所有内容。如果您删除了所有强引用,则它们不应再具有该链。

问题不再是是否会被收集,而是何时。问题是,GC 运行成本很高,因此运行时会尝试尽可能少地运行它。如果它只在应用程序关闭期间运行一次,那是理想的情况。所以不要因为增加内存使用而感到困惑。


推荐阅读