C# 垃圾收集器会释放这些对象吗?

Would C# garbage collector free these objects?

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

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

简而言之:

任何无法从当前范围(以及堆栈中保存的范围)访问的引用(及其所有后代)都将被收集

So, my question is, if I do remove the root node reference, will the garbage collector delete all the nodes? They do have pointers to each other, but I don't see any way in which I can access them anymore in this case.

最终:是的。

GC 可以在没有 "unbroken chain of strong references to a application root" 的情况下收集所有内容。如果您删除所有强引用,它们将不再具有该链。

问题不再是 if 他们将被收集,只有 when。问题是,GC 运行 很昂贵,所以 运行 时间会尽可能少地 运行 。如果在应用程序关闭期间它只 运行s 一次,那是理想的情况。所以不要被增加内存使用量所迷惑。