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

时间:2012-03-07 11:49:34

标签: c#

  

可能重复:
  Inline functions in C#?
  What is method inlining?

我一直在调试代码,问题的“可能”来源是一个标有此代码的函数:

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
protected virtual void PropertyHasChanged()

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

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

编辑:

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

1 个答案:

答案 0 :(得分:27)

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

这是为了正常表现。

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

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

var z = Add(x, y);

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

var z = x + y;

Wikipeida文章Inline expansion以:

开头
  

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