一个 Windows 服务在 debug build 和 release build 中性能有多大提升(如果有的话),为什么会有这个提升?
/optimize
会做一些事情,但它们并不是特别激进的优化。其中一些IL优化可能会被Jitter优化处理,即使在IL中没有进行优化(比如删除nops)。阅读Eric的文章,了解
/optimize
标志不会改变我们发出和生成逻辑的大部分。我们尝试始终生成直接、可验证的代码,然后依赖于Jitter在生成真正的机器代码时完成大量优化工作。但如果设置了该标志,我们将执行一些简单的优化。
/optimize
在IL生成方面的不同之处。虽然这个问题是重复的,但我觉得原问题中一些更好的答案在最底部。个人经历过在调试模式和发布模式下有明显差异的情况。(例如:Property performance,在访问属性时,在调试模式和发布模式之间存在2倍的差异)。无论这种差异是否存在于实际软件(而不是基准测试程序)中还有待商榷,但我曾经在一个产品上看到过它发生。
从Neil在原问题上的回答,来自msdn social:
它没有被很好地记录,这是我知道的。编译器会发射一个System.Diagnostics.DebuggableAttribute的实例。在调试版本中,IsJitOptimizerEnabled属性为True,在发布版本中为False。你可以在程序集清单中使用ildasm.exe查看此特性。