这个属性的作用是什么:MethodImplOptions.NoInlined(或者:什么是“内联”方法)[重复]

2024-04-06

可能的重复:
C# 中的内联函数? https://stackoverflow.com/questions/473782/inline-functions-in-c
什么是方法内联? https://stackoverflow.com/questions/3924995/what-is-method-inlining

我一直在调试代码,问题的“可能”根源在于标有此代码的函数中:

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

读MSDN是这样说的:指定该方法不能内联。

但什么是“内联”方法呢?

EDIT:

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


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

通常这样做是为了提高性能。

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

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

var z = Add(x, y);

编译器可能会将其内联为(消除进程中的方法):

var z = x + y;

维基百科文章内联扩展 http://en.wikipedia.org/wiki/Inline_expansion以。。开始:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个属性的作用是什么:MethodImplOptions.NoInlined(或者:什么是“内联”方法)[重复] 的相关文章

随机推荐