我一直在调试代码,问题的“可能”来源是一个标有此代码的函数:
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
protected virtual void PropertyHasChanged()
阅读MSDN说:指定无法内联该方法。
但是什么是'内联'方法?
编辑:
澄清:在每个属性的SET方法中调用PropertyHasChanged()
方法,并更新(添加1)内部对象计数器。当那个计数器> 0,对象被标记为'脏',并在调用Save时保存到数据库。当counter = 0时,对象将不会保存到数据库中。现在我已经知道这个代码有时候没有执行(计数器没有增加)所以对象不会被保存到数据库中,
答案 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以:
开头在计算,内联扩展或内联中,是一种手动或编译器优化,它将函数调用站点替换为被调用者的主体。这种优化可以改善运行时的时间和空间使用,可能会增加程序的最终大小(即二进制文件大小)。