对象的大型网络,它们都对对象具有相同的引用

Rea*_*lar 4 c# memory-leaks

我在内存中有一个庞大的节点网络,它们都有对同一个对象的引用.

举个例子.我们假设网络中的每个节点都是这个类.

public class Node
{
    /** This is the shared object **/
    public Context context { get; private set; }

    public Node Parent { get; private set; }

    public List<Node> Children { get; private set; }

    public Node(Context pContext, Node pParent, List<Node> pChildren)
    {
        this.context = pContext;
        this.Parent = pParent;
        this.Children = pChildren;
    }
}
Run Code Online (Sandbox Code Playgroud)

该属性context是一个传递给网络中所有节点的构造函数的对象.

假设网络非常大(数千个节点),它们形成树形结构.它们之间的这种共同参考是否会导致内存泄漏?

如果我通过设置分离树的一个分支ParentNull.C#即使context仍然是对此共享对象的引用,该分支是否会正确地进行垃圾回收?

我应该采用什么编码实践来确保这种方法正常工作.

Ree*_*sey 6

假设网络非常大(数千个节点),它们形成树形结构.它们之间的这种共同参考是否会导致内存泄漏?

不,它不应该.

如果我通过将Parent设置为Null来分离树中的分支.即使上下文仍然是对此共享对象的引用,该分支是否会被C#正确地进行垃圾回收?

是的,它应该.唯一一次这可能是一个问题,如果您订阅了更长寿的对象上的事件,因为事件订阅会创建您的类的引用.仅提及参考context将不会对允许收集您的课程产生任何影响.

主要问题是,只要没有任何东西可以通过引用"到达"您的对象,对象就会被垃圾收集.你的对象仍然可以保存对其他对象的引用,这只是另一种方法.