相关疑难解决方法(0)

为什么.NET JIT编译器决定不内联或优化掉没有副作用的空静态方法的调用?

我认为我正在观察.NET JIT编译器没有内联或优化对没有副作用的空静态方法的调用,考虑到一些直言不讳的在线资源,这有点令人惊讶.

我的环境是x64,Windows 8.1,.NET Framework 4.5上的Visual Studio 2013.

鉴于这个简单的测试程序(https://ideone.com/2BRCpC)

class Program
{
    static void EmptyBody()
    {
    }

    static void Main()
    {
        EmptyBody();
    }
}
Run Code Online (Sandbox Code Playgroud)

发布版本与上述程序的最优化产生以下MSIL为MainEmptyBody:

.method private hidebysig static void  Main() cil managed
{
  .entrypoint
  // Code size       6 (0x6)
  .maxstack  8
  IL_0000:  call       void Program::EmptyBody()
  IL_0005:  ret
} // end of method Program::Main

.method private hidebysig static void  EmptyBody() cil managed
{
  // Code size       1 (0x1)
  .maxstack  8
  IL_0000:  ret
} // …
Run Code Online (Sandbox Code Playgroud)

c# clr compiler-optimization

26
推荐指数
1
解决办法
1610
查看次数

标签 统计

c# ×1

clr ×1

compiler-optimization ×1