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

Cod*_*ove 2 c# compiler-construction methods optimization il

我认为我的问题最好用一个例子来问

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

Method2(variable newvar, variable var1, variable var2)
{
    //functionality
}
Run Code Online (Sandbox Code Playgroud)

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

Ree*_*sey 5

这完全是一个实现细节,可能会发生变化。然而,CLR 团队已在博客中介绍了何时可以内联方法(当然,这是在 RyuJIT 之前的情况)。

请注意,C# 编译器永远不会内联方法 - 内联发生在 JIT 编译阶段。然而,一般来说,正如您所描述的,一个简单的方法调用(不使用虚拟/抽象方法)将在运行时内联。