对于仅调用另一个方法的方法的编译器优化

时间:2014-06-24 00:39:57

标签: c# optimization methods compiler-construction il

我认为最好问一个例子

我的问题
Method1(variable var1, variable var2)
{
    Method2([null or default value goes here], var1, var2)
}

Method2(variable newvar, variable var1, variable var2)
{
    //functionality
}

编译器是否会通过将对method1的所有调用更改为对方法2的调用来优化我们的代码?我认为它会内联该方法。但是,如果method2调用3调用4调用5调用6,该怎么办?编译器是否将method1调用更改为使用它将具有的值来调用方法6?

1 个答案:

答案 0 :(得分:4)

这完全是一个实施细节,可能会有所变化。但是,CLR团队有blogged about when methods are eligible要内联(虽然这当然是在RyuJIT之前)。

请注意,C#编译器并没有内联方法 - 内联在JIT编译阶段发生。通常,如您所述,(在没有使用虚拟/抽象方法的情况下)的简单方法调用将在运行时内联。