Преимущества опции "Оптимизировать код" в сборке Visual Studio
Большая часть нашего кода выпуска С# построена с отключенной опцией "Оптимизировать код". Я считаю, что это позволяет легче отлаживать код, построенный в режиме Release.
Учитывая, что мы создаем довольно простое настольное программное обеспечение, которое подключается к бэкэнд-веб-сервисам (т.е. не особо интенсивному для процессора приложению), то что, если можно ожидать какого-либо повышения производительности?
И может ли какая-либо конкретная платформа быть хуже затронута? Например. многопроцессорный/64-разрядный.
Ответы
Ответ 1
Полную информацию можно найти на http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx.
Вкратце...
В управляемом коде JITter во время выполнения выполняет почти всю оптимизацию. Разница в генерации IL от этого флага довольно мала.
Ответ 2
Вы единственный человек, который может ответить на вопрос о производительности. Попробуйте в обоих направлениях, измерьте производительность и посмотрите, что произойдет. Удар может быть огромным, или он может быть несуществующим; никто не знает, знает ли это, что "огромное" для вас означает одну микросекунду или двадцать минут.
Если вас интересует, какие оптимизации выполняются компилятором С#, а не дрожанием, - когда включен переключатель оптимизации, см.
http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx
Ответ 3
На самом деле, есть разница, иногда весьма значительная. Что может реально повлиять на производительность (поскольку это то, что JIT не полностью заботится):
- Ненужные локальные переменные (т.е. большие кадры стека для каждого вызова)
- Слишком общие условные инструкции, JIT переводит их довольно просто.
-
Ненужное разветвление (также не очень хорошо работает JIT - в конце концов, у него не слишком много времени для всех умных оптимизаций)
Итак, если вы делаете что-то численное - включите оптимизацию. В противном случае вы не увидите никакой разницы.
Ответ 4
Оптимизации, выполняемые компилятором, довольно низки и не должны влиять на опыт ваших пользователей.
Если вы хотите количественно оптимизировать свою заявку, просто профиль не оптимизированной и оптимизированной сборки и сравните результаты.