Если вы беспокоитесь о производительности, запустите профилировщик. Затем изменить код. Скорее всего, за миллион лет вы никогда не угадаете на 100% правильно, куда идет время. Вы могли бы изменить время 0,02% и оставить метод, который вносит 62% бремени. Вы могли бы также сделать это хуже. Без профилировщика и доказательств ты слепой.
Вы не можете предполагать , что JIT встроит получатель свойства. Есть много причин, по которым он может или не может сделать это; размер тела метода, виртуальный, значение в зависимости от ссылочного типа, архитектура, присоединенный отладчик и т. д.
«Подъем» все еще имеет место, и все еще может достичь экономии , если код вызывается повторно в узком цикле; например:
var count = list.Count;
for(int i = 0 ; i < count ; i++) {...}
(забудьте о дискуссии for
против foreach
из вышесказанного - это ортогональное обсуждение). В вышеизложенном «подъемник» поможет производительности. Но просто чтобы быть действительно сбивающим с толку - с массивами, это наоборот, и более эффективно не поднять это:
for(int i = 0 ; i < arr.Length ; i++) {...}
JIT распознает это и снимает проверку границ (так как массивы имеют фиксированный размер).