Подтвердить что ты не робот

Инициализация 'var' до нуля

Есть ли разница в производительности во время выполнения между следующими переменными инициализации?

var    x = null as object;
var    x = (object) null;
object x = null;
4b9b3361

Ответ 1

Я считаю нет, так как нет никакой разницы в скомпилированном IL.

var    x = null as object;
var    x1 = (object)null;
object x2 = null;

скомпилируется в

IL_0001:  ldnull      
IL_0002:  stloc.0     // x
IL_0003:  ldnull      
IL_0004:  stloc.1     // x1
IL_0005:  ldnull      
IL_0006:  stloc.2     // x2

Вы можете видеть, что все локали инициализируются нулем, используя только код операции ldnull, поэтому нет никакой разницы.

Ответ 2

Прежде всего: Нет, я считаю, что эти три вызова по сути эквивалентны.

Во-вторых: даже если бы между ними была какая-то разница, это, безусловно, было бы настолько незначительным, что это было бы совершенно неактуально в приложении.

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

Более длинная интересная дискуссия об этом на сайте programers.stackexchange.