Инициализация 'var' до нуля
Есть ли разница в производительности во время выполнения между следующими переменными инициализации?
var x = null as object;
var x = (object) null;
object x = null;
Ответы
Ответ 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.