csc.exe / optimize flag - 使用优化标志的任何不利影响?

时间:2014-05-06 12:22:28

标签: c# csc

我正在通过csc.exe编译一个C#程序。

我注意到csc.exe的默认设置是不包含优化选项。相反,您必须使用/optimize标志明确说明它。

我想知道使用/optimize标志是否有任何潜在的不利影响。换句话说,为什么我不总是想要使用它?

我有兴趣了解旗下“旗下”的确切内容,因此任何有关优秀文档的链接都会受到赞赏(尚未在MSDN或Google上找到任何内容)。

由于

1 个答案:

答案 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

(显然有更复杂的案例)