gpt4 book ai didi

c# - 垃圾收集、.NET、C#

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:29 24 4
gpt4 key购买 nike

我有三个对象 A、B 和 C。C 是 A 和 B 的子对象。C 引用了 A 和 B。A 和 B 引用了 C。我理解当 A 和 B 对 C 的引用被删除时,C 变成垃圾并将被 GC 收集。

  1. 我的理解正确吗?
  2. 是否应该将 C 中对 A 和 B 的引用设置为 NULL?
  3. 如果是,有什么好处?

public class A { public C Cr { get; set; } }
public class B { public C Cr { get; set; } }
public class C

{
public A Ar { get; set; }
public B Br { get; set; }

}
class Program
{
static void Main(string[] args)
{
var oa = new A();
var ob = new B();
var oc = new C();

oc.Ar = oa;
oc.Br = ob;
oa.Cr = oc;
ob.Cr = oc;

// Some operation

oa.Cr = null;
ob.Cr = null;

//is the following code required?
// if yes, what is the benefit?

oc.Ar = null;
oc.Br = null;

}

谢谢

拉姆

最佳答案

如果没有对 C 的实时引用,则它有资格进行垃圾回收。这并不意味着它会立即被垃圾收集。

如果对象即将符合垃圾回收条件,则无需在该对象内设置对 null 的引用。

请注意,如果没有对 A、B 或 C 的“根”引用,它们将全部符合垃圾回收条件,即使它们继续相互引用也是如此。

关于c# - 垃圾收集、.NET、C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5647379/

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