Сообщение Re[14]: Только что с интервью... от 29.03.2017 7:58
Изменено 29.03.2017 9:20 fmiracle
Re[14]: Только что с интервью...
Здравствуйте, IT, Вы писали:
IT>Будет ли разным генерируемый код для следующего?
IT>
IT>Я не уверен.
Если проверить поведение экспериментально, то видно, что в релиз-сборке, объект, на который ссылается переменная, может быть собран сборщиком мусора после того, как переменная уже не используется. Неважно, внутри блока или нет. Если переменная объявлена внутри блока, то это просто точная уверенность, что дальше она уже не используется.
IT>Будет ли разным генерируемый код для следующего?
IT>
IT>void Foo()
IT>{
IT> {
IT> object o = new object();
IT> }
IT>}
IT>void Foo()
IT>{
IT> object o = new object();
IT> {
IT> }
IT>}
IT>void Foo()
IT>{
IT> object o;
IT> {
IT> o = new object();
IT> }
IT>}
IT>
IT>Я не уверен.
Если проверить поведение экспериментально, то видно, что в релиз-сборке, объект, на который ссылается переменная, может быть собран сборщиком мусора после того, как переменная уже не используется. Неважно, внутри блока или нет. Если переменная объявлена внутри блока, то это просто точная уверенность, что дальше она уже не используется.
вот такой пример на коленке | |
вывод в Релизе: Т.е. первые 3 объекта успешно собираются сборщиком мусора еще до окончания метода. И при этом неважно, как они объявлены — значение имеет лишь, что на момент сборки мусора CLR видит, что далее эти переменные не используются. В дебаге, кстати, вывод другой, там сборка всех объектов только по окончании метода:
| |
Re[14]: Только что с интервью...
Здравствуйте, IT, Вы писали:
IT>Будет ли разным генерируемый код для следующего?
IT>
IT>Я не уверен.
Если проверить поведение экспериментально, то видно, что в релиз-сборке, объект, на который ссылается переменная, может быть собран сборщиком мусора после того, как переменная уже не используется. Неважно, внутри блока или нет. Если переменная объявлена внутри блока, то это просто точная уверенность, что дальше она уже не используется.
IT>Будет ли разным генерируемый код для следующего?
IT>
IT>void Foo()
IT>{
IT> {
IT> object o = new object();
IT> }
IT>}
IT>void Foo()
IT>{
IT> object o = new object();
IT> {
IT> }
IT>}
IT>void Foo()
IT>{
IT> object o;
IT> {
IT> o = new object();
IT> }
IT>}
IT>
IT>Я не уверен.
Если проверить поведение экспериментально, то видно, что в релиз-сборке, объект, на который ссылается переменная, может быть собран сборщиком мусора после того, как переменная уже не используется. Неважно, внутри блока или нет. Если переменная объявлена внутри блока, то это просто точная уверенность, что дальше она уже не используется.
вот такой пример на коленке | |
вывод в Релизе: Т.е. первые 3 объекта успешно собираются сборщиком мусора еще до окончания метода. И при этом неважно, как они объявлены — значение имеет лишь, что на момент сборки мусора CLR видит, что далее эти переменные не используются. В дебаге, кстати, вывод другой, там никакие локальные объекты не собираются до окончания метода:
| |