Krishna Veni Ответов: 2

Почему следует использовать gc.collect () ?


Я использовал деструктор в такой программе

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace destructors
{
    class Program
    {
        int i = 5;
        public Program()
        {
            Console.WriteLine("Object created");
        }
        ~Program()
        {
            Console.WriteLine("Object destroyed");
        }
        static void Main(string[] args)
        {
            Program p = new Program();
            Console.WriteLine(p.i);
            p = null;
            GC.Collect();
            Console.ReadLine();
        }
    }
}



в приведенной выше программе я использовал GC.collect для уничтожения объекта, но всякий раз, когда назначаю

p=null, то p объектная память освобождается, почему следует использовать именно GC.collect().what

назначение ГК.собирать().является обязательным, если P=null используйте в программу.

Спасибо тебе.

Помоги мне.

Что я уже пробовал:

в приведенной выше программе я использовал GC.collect для уничтожения объекта, но всякий раз, когда назначаю

p=null, то p объектная память освобождается, почему следует использовать именно GC.collect().what

назначение ГК.собирать().является обязательным, если P=null используйте в программу.

2 Ответов

Рейтинг:
1

Tisham Ahuja

1) оператор p=null не освобождает память объекта. После выполнения этого оператора p ссылка больше не указывает на объект класса программы, на который она указывала ранее.

2) произойдет де-выделение, или я говорю, что память, занятая объектом класса программы в куче, будет освобождена при следующем вызове GC.

И GC.Сбор сделает пункт 2 произойдет немедленно.

Пожалуйста, поправьте меня, если я где-то ошибаюсь. Надеюсь, это поможет. Наслаждайтесь обучением :)


Рейтинг:
0

Dave Kreskowiak

Обычно вам никогда не нужно звонить в GC.Собирать().

Это полезно только в том случае, если вы действительно знаете, что вы делаете, почему вы это делаете, последствия вызова этого, и обычно из-за ограничений памяти, которые ваш код помещает в систему, что чрезвычайно редко.

Он используется в приведенном выше примере только для демонстрации времени жизни объекта. Это не требуется в обычном коде.