该属性的作用是什么:MethodImplOptions.NoInlining(或者:'inlining'方法是什么)

Mic*_*hel 22 c#

可能重复:
C#中的内联函数?
什么是内联方法?

我一直在调试代码,问题的"可能"来源是一个用这段代码标记的函数:

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
protected virtual void PropertyHasChanged()
Run Code Online (Sandbox Code Playgroud)

阅读MSDN说明:指定无法内联该方法.

但是什么是'内联'方法?

编辑:

为了澄清:在PropertyHasChanged()每个属性的SET方法中调用该方法,并更新(添加1)内部对象计数器.当该计数器> 0时,该对象被标记为"脏",并在调用Save时保存到数据库中.当counter = 0时,对象将不会保存到数据库中.现在我已经知道这个代码有时候没有执行(计数器没有增加)所以对象不会被保存到数据库中,

Ode*_*ded 29

内联方法/属性意味着编译器接受它并用其内容替换对它的调用(确保正确的变量等).这不是C#特有的.

这通常是为了提高性能.

例如,使用此方法并调用:

private long Add(int x, int y)
{
   return x + y;
}

var z = Add(x, y);
Run Code Online (Sandbox Code Playgroud)

编译器可以将其内联为(消除过程中的方法):

var z = x + y;
Run Code Online (Sandbox Code Playgroud)

Wikipeida文章Inline扩展始于:

在计算,内联扩展或内联中,是一种手动或编译器优化,它将函数调用站点替换为被调用者的主体.该优化可以在运行时改善时间和空间使用,可能以增加程序的最终大小(即二进制文件大小)为代价.

  • 为清楚起见 - C#编译器将*从不*内联方法.这是JITter的任务. (4认同)