我正在通过csc.exe编译一个C#程序。
我注意到csc.exe的默认设置是不包含优化选项。相反,您必须使用/optimize
标志明确说明它。
我想知道使用/optimize
标志是否有任何潜在的不利影响。换句话说,为什么我不总是想要使用它?
我有兴趣了解旗下“旗下”的确切内容,因此任何有关优秀文档的链接都会受到赞赏(尚未在MSDN或Google上找到任何内容)。
由于
答案 0 :(得分:3)
您将找到的最佳文档是新编译器平台的代码' Roslyn'您可以关注CompilationOptions.cs
中的编译器标志public bool Optimize { get; protected set; }
如果单击该属性,您将在代码中看到所有引用。
这个标志的主要后果之一似乎是Optimizer.Optimize被调用并尝试优化代码,尤其是尽可能减少堆栈中的内容。
var a = Foo();
var b = Bar();
Baz(a, b);
可以写成(伪IL):
Declare Locals a, b
Call Foo
a := pop stack
Call Bar
b := pop stack
push a
push b
Call Baz
但是,完全可以优化它以移除当地人:
Call Foo
Call Bar
Call Baz
(显然有更复杂的案例)