Ах ... Открыто снова. ХОРОШО. Вот сделка.
ILDASM - это начало, но не конец. Ключ: что сгенерирует JIT для ассемблерного кода?
Вот что вы хотите сделать.
Возьмите пару примеров того, на что вы пытаетесь взглянуть. Очевидно, вы можете настроить время на них, если хотите, но я предполагаю, что вы хотите знать больше.
Вот что не очевидно. Компилятор C # генерирует некоторые последовательности MSIL, которые неоптимальны во многих ситуациях. JIT настроен на то, чтобы справиться с этим и причудами других языков. Проблема: настроены только «причуды», замеченные кем-то.
Вы действительно хотите создать пример, в котором ваши реализации будут пытаться выполнить, вернуться обратно к main (или куда угодно), Sleep () или к чему-то, где вы можете присоединить отладчик, а затем снова запустить процедуры.
Вы НЕ хотите запускать код под отладчиком, иначе JIT сгенерирует неоптимизированный код - и, похоже, вы хотите знать, как он будет вести себя в реальной среде. JIT делает это, чтобы максимизировать отладочную информацию и минимизировать текущее местоположение источника от «прыжков вокруг». Никогда не запускайте тестирование отладчика.
OK. Поэтому, как только код был запущен один раз (то есть: JIT сгенерировал код для него), затем подключите отладчик во время сна (или чего-то еще). Затем посмотрите на x86 / x64, сгенерированный для двух подпрограмм.
Мой инстинкт говорит мне, что если вы используете ++ i / i ++, как вы описали, то есть в автономном выражении, где результат rvalue не используется повторно, разницы не будет. Но разве не будет забавно пойти узнать и увидеть все аккуратные вещи! :)