Где я могу изменить подробные настройки оптимизации компилятора C # в Visual Studio?

В проектах Visual Studio C / C ++ легко изменить параметры оптимизации компилятора в «Страницы свойств | C / C ++ | Оптимизация». Например, мы можем дать разные уровни оптимизации, такие как / O2 и / O3, а также расширенные оптимизации, такие как «Omit Frame Pointers».

Однако я не могу просто найти соответствующие пользовательские интерфейсы в проекте C # Visual Studio. Все, что я могу найти, это просто отключить оптимизацию: флажок «Оптимизировать код» – это все, что у меня есть.

Могут ли пользователи C # управлять подробными оптимизациями компилятора, такими как C / C ++? Должен ли я предоставлять параметры компилятора в командной строке?

alt text http://sofru.miximages.com/c%23/28ststh.png

Большая часть оптимизации кода C # продолжается на уровне компилятора JIT, а не на компиляторе C #. В основном нет таких подробных настроек, как те, которые доступны на C или C ++.

Есть несколько связанных с производительностью элементов среды выполнения, которые можно настроить, таких как страtagsи GC, но не так много.

Когда я строю тесты тестов и т. Д. Из командной строки, я обычно использую что-то вроде этого:

csc /o+ /debug- Test.cs 

полагаю, что я видел, что наличие соответствующего файла pdb имеет значение для производительности, возможно, с точки зрения стоимости исключений, отбрасываемых, следовательно, debug- переключатель … но я мог ошибаться.)

EDIT: Если вы хотите увидеть разницу, которую делает каждый бит оптимизации, есть один подход, который может оказаться интересным:

  • Компиляция того же кода с оптимизацией и без нее
  • Используйте ildasm или Reflector в режиме IL, чтобы узнать, в чем различия
  • Применяйте те же изменения по одному вручную (используя ilasm) и измеряйте, сколько у каждого из них есть

Компилятор AFAIK C # не имеет таких подробных оптимизационных свойств. Вероятно, оптимизация включена или отключена.


http://msdn.microsoft.com/en-us/library/6s2x2bzy.aspx

Я нашел всего два:

  • /filealign Задает размер разделов в выходном файле.

  • /optimize Включает / отключает оптимизацию.

Немного OT, но кто-то, кто смотрит на этот вопрос, может найти это полезным:

Добавление этого метода в подпись метода: [MethodImpl (MethodImplOptions.NoOptimization)]

отключает оптимизацию компилятора для этого метода.

Подробнее см. Здесь: https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396