是否有完整的/optimize C# compiler key完成的优化列表?
编辑: 为什么默认禁用? 是否值得在真实世界的应用程序中使用? - 默认情况下仅在调试配置中禁用它并在发布中启用。
答案 0 :(得分:7)
Scott Hanselman has a blog post显示了什么/优化(在发布版本中启用)的一些示例。
作为总结:/ optimize做了许多没有给出确切数字或定义的东西,但其中一个更明显的是方法内联(如果你有一个方法A()调用B()调用C()调用D(),编译器可以“跳过”B和C并直接从A转到D),这可能会导致Release版本中出现“怪异”的callstack。
答案 1 :(得分:2)
默认情况下,调试版本禁用它。对于Release版本,它已启用。
绝对值得启用此开关,因为编译器会根据您拥有的代码类型进行大量调整和优化。 例如:跳过冗余初始化,从不改变的比较等。
注意:如果启用优化作为您拥有的代码和生成的IL代码可能不匹配,则可能会遇到一些调试困难。这就是它仅为Release版本打开的原因。
答案 2 :(得分:2)
引自MSDN page:
/ optimize选项启用或 禁用由...执行的优化 编译器来制作你的输出文件 更小,更快,更高效。
换句话说,它完全符合您的想法 - 优化由.NET VM执行的已编译CIL(通用中间语言)代码。我不担心具体的优化是什么 - 足以说它们很多,在某些情况下可能相当复杂。如果你真的对它做了什么样的事情感兴趣,你可能会调查Mono C# Compiler(我怀疑有关MS C#的详细信息是公开的)。
Debug 配置默认禁用优化的原因是它使某些调试功能无法进行。一些值得注意的:
实际上,优化的默认选项永远不应该改变。选择关闭以进行调试非常有用,而将其置于发布模式同样明智。