我不期待一个明确的是或否。 任何知识,你可能有,我会考虑作为一个答案。
private String CalculateCharge(Nullable<Decimal> bill, Nullable<Decimal> rate)
{
return ((bill ?? 0.0m) * (rate ?? 0.0m)).ToString("C");
}
我不期待一个明确的是或否。 任何知识,你可能有,我会考虑作为一个答案。
private String CalculateCharge(Nullable<Decimal> bill, Nullable<Decimal> rate)
{
return ((bill ?? 0.0m) * (rate ?? 0.0m)).ToString("C");
}
内联是JIT的实现细节,而不是C#编译器。 从埃里克Gunnerson的博客 :
该JIT使用了一些启发式的决定方法是否应该在内衬。 以下是那些较为显著的列表(注意,这并不详尽):
- 方法是大于32个字节IL不会被内联。
- 虚函数不内联。
- 有复杂的流程控制方法不会在成荫。 复杂的流控制是任何流量控制以外的if / then /别的; 在这种情况下,切换或同时。
- 包含异常处理模块的方法没有内联,虽然抛出异常的方法仍然是内联的候选人。
- 如果有任何的方法的形参的结构,该方法将无法进行内联。
虽然你的方法很短,不是很复杂,所以它可能匹配的启发式扫描, Nullable<T>
是一个struct
,所以我猜你的方法是不是内联。
作为一个经验法则,如果内联这个方法可以提高性能,在JIT将内联这个方法; 否则它不会。 但是,这是真正的JIT并没有什么,你应该代码的实现细节:
我会仔细考虑明确地编码这些启发式 ,因为他们可能会在JIT的未来版本中改变。 不妥协的方法的正确性,试图保证它会被内联。
编辑:显然,关于未内联结构的位外的日期; 更新的信息可以在这里找到万斯莫里森的博客 。