Visual Studio构建中"优化代码"选项的优点

g t*_*g t 28 c# compiler-construction build compiler-optimization visual-studio

我们的大部分C#发布代码都是在关闭"优化代码"选项的情况下构建的.我相信这是为了让发布模式内置的代码更容易调试.

鉴于我们正在创建相当简单的桌面软件,连接到后端Web服务(即,不是特别是处理器密集型应用程序),那么如果可能出现任何类型的性能影响呢?

是否有任何特定平台可能受到更严重的影响?例如.多处理器/ 64位.

Eri*_*ert 31

您是唯一能够回答"性能影响"问题的人.尝试两种方式,测量性能,看看会发生什么.命中可能是巨大的,也可能是不存在的; 没有人读到这个知道对你来说"巨大"意味着是一微秒还是二十分钟.

如果您对优化开关打开时C#编译器进行的优化(而不是抖动)感兴趣,请参阅:

http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx

  • 当前链接https://blogs.msdn.microsoft.com/ericlippert/2009/06/11/what-does-the-optimize-switch-do/ (2认同)

Zia*_*hoy 14

有关详细信息,请访问http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx.

简单来说...

在托管代码中,运行时中的JITter几乎完成了所有优化.生成的IL与此标志的差异非常小.

  • 我不确定为什么这个引用很重要.即使生成的IL不是,JITter的优化也会受到标志的影响,因此该标志将对性能产生影响.最初的问题是关于这种差异的程度. (6认同)

SK-*_*gic 6

事实上,存在差异,有时甚至非常显着.什么才能真正影响性能(因为它是JIT没有完全照顾的东西):

  • 不必要的局部变量(即每次调用的堆栈帧越大)
  • 太通用的条件指令,JIT以非常简单的方式对它们进行翻译.
  • 不必要的分支(JIT也不能很好地完成 - 毕竟,它没有太多时间来进行所有智能优化)

    所以,如果你正在做一些数字化的事情 - 打开优化.否则你根本不会看到任何差异.