Сборка мусора, .NET, C # - PullRequest
       4

Сборка мусора, .NET, C #

1 голос
/ 13 апреля 2011

У меня есть три объекта A, B и C. C является потомком A и B. C имеет отношение к A и B. A и B имеет ссылку на C. Я понимаю, что когда ссылка на C из A и B удаляется, C становится мусором и будет собираться GC.

  1. Правильно ли мое понимание?
  2. Должен ли я установить ссылку на A и B в C на 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;

    }

Спасибо

Ram

1 Ответ

7 голосов
/ 13 апреля 2011

Если нет живых ссылок на C, тогда он становится приемлемым для сборки мусора.Это не означает, что это будет сбор мусора сразу.

Вам не нужно устанавливать ссылки на нуль внутри объекта, если этот объект собирается получить право на сборку мусора.

Обратите внимание, что если нет «корневых» ссылок на A, B или C, они все будут иметь право на сборку мусора, даже если они будут продолжать ссылаться друг на друга.

...