c# - 只调用另一个方法的方法的编译器优化

标签 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
}

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

最佳答案

这完全是一个实现细节,可能会发生变化。但是,CLR 团队有 blogged about when methods are eligible内联(当然,这是 RyuJIT 之前的版本)。

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

关于c# - 只调用另一个方法的方法的编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376679/

相关文章:

C# string.IndexOf() 返回意外值

c# - 如何在没有安装 MS Office 的机器上使用 Microsoft.Office.Interop.Excel?

c# - 在 Visual Studio Enterprise 2017 中缺少创建 GUID?

c - 优化(C语言): Many function calls vs One function call

java - 如何从一个方法返回两种不同类型的值?

c# - UIA 自定义条件

Python-将列表成对转换为字典

MySQL CLAUSE可以变成一个值吗?

objective-c - 再次声明时可以随机设置变量吗?

objective-c - 模拟Objective C中的抽象类和抽象方法?