gpt4 book ai didi

c# - 对一个对象具有相同引用的对象的大型网络

转载 作者:太空狗 更新时间:2023-10-30 00:25:12 25 4
gpt4 key购买 nike

我在内存中有一个大型节点网络,它们都引用了同一个对象。

举个例子。假设网络中的每个节点都是此类。

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;
}
}

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

假设网络非常大(数千个节点),并且它们形成一个树结构。它们之间这种共同的共享引用会导致内存泄漏吗?

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

我应该采用什么编码实践来确保其正常工作。

最佳答案

Assuming the network is very large (thousands of nodes), and they form a tree structure. Will this common shared reference among them lead to memory leaks?

不,不应该。

If I detach a branch in the tree by setting Parent to Null. Will that branch be correctly garbage collection by C# even if context remains a reference to this shared object?

是的,应该的。唯一可能成为问题的情况是,如果您要订阅生命周期更长的对象上的事件,因为事件订阅会创建对您的类的引用。。仅保留对 context 的引用不会对允许收集您的类产生任何影响。

主要问题是,一旦没有任何东西可以通过引用“到达”您的对象,对象就会被垃圾回收。您的对象仍然可以保存对其他对象的引用,只是重要的是反过来。

关于c# - 对一个对象具有相同引用的对象的大型网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18339852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com