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

时间:2010-03-15 00:39:04

标签: c# visual-studio compiler-construction build compiler-optimization

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

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

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

5 个答案:

答案 0 :(得分:30)

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

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

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

答案 1 :(得分:14)

详情请见http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx

简而言之......

  

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

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:2)

编译器完成的优化程度相当低,不应影响用户体验。

如果您想量化应用程序的优化,只需分析非优化和优化的构建并比较结果。

答案 4 :(得分:0)

我发现使用复杂的CPU密集型代码(我正在使用的代码是Monte Carlo仿真,可以产生足够的线程以100%使用计算机。这在36核环境中进行了测试)可以降低性能高达4倍!如果不进行优化标记,则需要2个小时的模拟过程大约需要9个小时。 (路径大约为500,000,对于大约2000个不同的对象,每个路径有500个步骤,每个对象的计算都非常复杂。