По той или иной причине я иногда нахожу это полезным или просто интересным посмотреть на оптимизированный выход компилятора для функции.
Для неуправляемого кода C/C++, мой любимый способ сделать, который это должно было скомпилировать в режиме Release, засунуть точку останова в функцию интереса, работать и просмотреть дизассемблирование в Visual Studio, когда это поражает точку останова.
Я недавно попробовал это проектом C# и обнаружил, что та техника не работает. Даже в режиме Release, дизассемблирование, которое я вижу, очевидно, не оптимизировано. Я нашел и отключил (в Visual Studio 2010) опцию "Debug... Options and Settings... Debugging... General... Suppress JIT optimization on module load", которая presumeably получает меня ближе к тому, что я хочу, только теперь она предупреждает меня, когда я пытаюсь выполнить ее, и я затем не могу заставить ее останавливаться на точке останова так, чтобы я видел дизассемблирование.
Так, если я хочу видеть демонтированный, оптимизированный вывод CLR (4.0) дрожание для функции, что лучший способ состоит в том, чтобы пойти об этом? Чтобы быть ясным, я хотел бы видеть x86 (или предпочтительно x86_64) дизассемблирование, не только дизассемблирование IL (который Вы видите в Отражателе).
Конечно, после полдня поиска ответа на этот, я сам нахожу ответ через 5 минут после того, как спрашиваю. ТАК.
Я был близок; единственный недостающий шаг из того, что у меня был в вопросе, заключался в том, что «Включить только мой код» также должен быть снят в параметрах.
Полное руководство доступно здесь: http://blogs.msdn.com/b/vancem/archive/2006/02/20/535807.aspx
Я считаю, что JIT знает, когда вы работаете под отладчиком, и генерирует более «удобный для отладчика» код x86, который объясняет, почему код x86, который вы видели, не был оптимизирован.
Вы можете попробовать запустить приложение в автономном режиме, выполнив интересующий вас код хотя бы один раз (чтобы оно выполнялось JIT без присоединенного отладчика), затем присоедините отладчик к процессу и установите точку останова.
Вы можете попробовать проверить сборку NGEN, но это будет довольно сложно, поскольку метаданные отсутствуют. Но это могло сработать :)