这是一种noob问题。我有一个简单的属性何时通过代码优化“内联”属性
bool IsRoot { get { return parent==null; } }
,我打电话过去,在类中的其他属性和方法很多次(和派生类)
我想保持它喜欢这样,因为它使代码可读性(对我来说),但恐怕所有的IsRoot
调用都会让我放慢脚步,因为它们可能不会在最终版本代码中“内联”。我所说的“内联”是指用parent==null
评估版本代替get_IsRoot()
替换它们。
有人可以向我解释什么时候(或如果)属性在C#中内联,而面向性能的应用程序是属性要避免或不?
EDIT_1: 简短的回答是:属性转换为纯函数调用,他们可能,或者根据什么决定JIT可能不会被内联。相信系统做出正确的选择,不要担心可能会影响5%-10%级别事情的事情,除非使用分析器,并且最终结果会根据性能进行调整。
感谢您的链接SO社区,我希望有一种方法来奖励多个正确的答案。对不起,我必须选择一个。
大问题。我的猜测是它几乎总是被内联。但我不确定。您可以通过编译器生成生成的CLI代码并查看正在执行的操作。如果他在身边,John Skeet肯定会回答这个问题。 – 2010-11-08 20:55:08
+1除了“过早优化!” - 诱饵之外,这是一个有趣的问题。 :) – 2010-11-08 20:55:23
@Justin一个名为'IsRoot'的属性返回布尔值比较的结果会使*更有意义*如果它是一个名为'MakeRoot()'的方法?嗯...? – 2010-11-08 20:56:37