Когда сборщик мусора .NET освободит этот объект?

Employee obj = new Employee();

obj.Dispose(); //statement 1;
obj = null; //statement 2

По какому оператору сборщик мусора удалит объект?

Что именно будет происходить за кулисами операторов 1 и 2


person manish    schedule 28.04.2016    source источник
comment
На каком языке ты говоришь?   -  person Felipe Sulser    schedule 28.04.2016
comment
@FelipeSulser в .net   -  person manish    schedule 29.04.2016


Ответы (1)


Это могло быть что угодно или ничего.

Если конструктор по умолчанию и метод Dispose не имеют побочных эффектов и компилятор может это видеть, он может полностью пропустить генерацию кода для вашего фрагмента, считая все это бездействующим.

В качестве альтернативы, если только метод Dispose не работает, тогда сборщик мусора может собрать объект сразу после этой строки:

Employee obj = new Employee();

В качестве альтернативы, если сборщик мусора может доказать, что объект больше не читается после Dispose (даже если он все еще находится в области видимости), он может собрать объект сразу после этой строки:

obj.Dispose();

В качестве альтернативы, если GC не может доказать что-либо из этого, он может сделать это в любое время после этой строки:

obj = null;

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

person Theodoros Chatzigiannakis    schedule 29.04.2016