По той или иной причине я иногда нахожу полезным или просто интересным посмотреть на оптимизированный вывод компилятора для функции.
Для неуправляемого кода C/C++ мой любимый способ сделать это — скомпилировать в режиме Release, установить точку останова в интересующей функции, запустить и просмотреть дизассемблированный код в Visual Studio, когда он достигнет точки останова.
Недавно я попробовал это с проектом C# и обнаружил, что этот метод не работает. Даже в режиме Release разборка, которую я вижу, явно не оптимизирована. Я нашел и отключил (в Visual Studio 2010) параметр «Отладка... Параметры и настройки... Отладка... Общие... Подавить оптимизацию JIT при загрузке модуля», который, по-видимому, приближает меня к тому, что я хочу, только теперь он предупреждает меня, когда я пытаюсь запустить его, и тогда я не могу заставить его остановиться на точке останова, чтобы я мог видеть дизассемблирование.
Итак, если я хочу увидеть разобранный, оптимизированный вывод джиттера CLR (4.0) для функции, как лучше всего это сделать? Чтобы было ясно, я хотел бы увидеть дизассемблирование x86 (или предпочтительно x86_64), а не только дизассемблирование IL (которое вы можете увидеть в Reflector).