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

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

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

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

альтернативный текст http://i32.tinypic.com/28ststh.png

Ответы [ 3 ]

8 голосов
/ 12 июля 2010

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

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

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

csc /o+ /debug- Test.cs

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

РЕДАКТИРОВАТЬ: если вы хотите увидеть разницу, которую вносит каждый бит оптимизации, есть один подход, который может оказаться интересным:

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

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

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

Я нашел только два:

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

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

1 голос
/ 18 марта 2015

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

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

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

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

...