【问题标题】:Compiler Optimization for methods that only call another method仅调用另一个方法的方法的编译器优化
【发布时间】:2014-06-24 00:39:56
【问题描述】:

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

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

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

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

【问题讨论】:

  • 请记住,内联 Method1(或 Method2)实际上可以节省 no 时间,除非 1) //functionality 几乎没有,并且 2) 它被调用的次数足够多,以至于它占了很大一部分时间。因此,如果/当编译器/JITter 内联它时,它这样做只是因为在某些情况下它可能会有所帮助。
  • 你为什么在乎?肯定还有更重要的事情需要担心吗?

标签: c# optimization methods compiler-construction il


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多