我在内存中有一个庞大的节点网络,它们都有对同一个对象的引用.
举个例子.我们假设网络中的每个节点都是这个类.
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是一个传递给网络中所有节点的构造函数的对象.
假设网络非常大(数千个节点),它们形成树形结构.它们之间的这种共同参考是否会导致内存泄漏?
如果我通过设置分离树的一个分支Parent来Null.C#即使context仍然是对此共享对象的引用,该分支是否会正确地进行垃圾回收?
我应该采用什么编码实践来确保这种方法正常工作.
假设网络非常大(数千个节点),它们形成树形结构.它们之间的这种共同参考是否会导致内存泄漏?
不,它不应该.
如果我通过将Parent设置为Null来分离树中的分支.即使上下文仍然是对此共享对象的引用,该分支是否会被C#正确地进行垃圾回收?
是的,它应该.唯一一次这可能是一个问题,如果您订阅了更长寿的对象上的事件,因为事件订阅会创建对您的类的引用.仅提及参考context将不会对允许收集您的课程产生任何影响.
主要问题是,只要没有任何东西可以通过引用"到达"您的对象,对象就会被垃圾收集.你的对象仍然可以保存对其他对象的引用,这只是另一种方法.