我一直在调试代码,问题的"可能"来源是一个用这段代码标记的函数:
[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扩展始于:
在计算,内联扩展或内联中,是一种手动或编译器优化,它将函数调用站点替换为被调用者的主体.该优化可以在运行时改善时间和空间使用,可能以增加程序的最终大小(即二进制文件大小)为代价.