【发布时间】:2012-03-24 22:48:49
【问题描述】:
我一直在调试代码,问题的“可能”根源在于标有此代码的函数:
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
protected virtual void PropertyHasChanged()
读MSDN是这么说的:指定方法不能内联。
但是什么是“内联”方法?
编辑:
澄清:PropertyHasChanged() 方法在每个属性的 SET 方法中调用,并更新(向其添加 1)内部对象计数器。当该计数器 > 0 时,对象被标记为“脏”,并在调用 Save 时保存到数据库中。当 counter = 0 时,对象不会被保存到数据库中。现在我知道这段代码有时不会被执行(计数器不会增加),所以对象不会被保存到数据库中,
【问题讨论】:
-
请注意,虽然这是一个有效的问题,但这种方法的内联与否几乎肯定与您正在调试的任何问题无关。
-
@Veger:我读过那篇文章,但它主要是关于 C# 中的内联方法,而不是它的含义......
-
(我的欺骗候选人不是 C# 特定的,但确实解释了内联实际上是什么)
-
投票率最高的答案指出:“内联方法只是一种编译器优化,其中函数的代码被滚动到调用者中。”其中(非常简要地)描述了方法代码直接放入调用上下文中(而不是创建实际方法)。那就是内联。
-
这就像一场经典的穿线比赛。是的,内联会影响这样的错误。
标签: c#