Cha*_*ion 6 c# jit heuristics inline-method
我没想到肯定是或否.你可能拥有的任何知识我都会考虑作为答案.
private String CalculateCharge(Nullable<Decimal> bill, Nullable<Decimal> rate)
{
return ((bill ?? 0.0m) * (rate ?? 0.0m)).ToString("C");
}
Run Code Online (Sandbox Code Playgroud)
dtb*_*dtb 22
内联是JIT的实现细节,而不是C#编译器的实现细节.来自Eric Gunnerson的博客:
JIT使用许多启发式方法来决定方法是否应该是内联的.以下是更重要的列表(请注意,这并非详尽无遗):
- 不会内联大于32字节IL的方法.
- 虚函数未内联.
- 具有复杂流量控制的方法不会被列入内联.复杂流量控制是除if/then/else之外的任何流量控制; 在这种情况下,切换或同时.
- 虽然抛出异常的方法仍然是内联的候选方法,但不会内联包含异常处理块的方法.
- 如果方法的任何形式参数都是结构体,则不会内联该方法.
虽然你的方法很短,不是很复杂,所以它可能匹配的启发,Nullable<T>是一个struct让我猜你的方法是不是内联.
根据经验,如果内联此方法可以提高性能,JIT将内联此方法; 否则它不会.但这实际上是JIT的一个实现细节,你应该编写代码:
我会仔细考虑明确编写这些启发式编码,因为它们可能会在JIT的未来版本中发生变化.不要妥协方法的正确性,以保证它将被内联.
编辑:显然有关结构没有内联的一点是过时的; 更新的信息可以在Vance Morrison的博客上找到.
| 归档时间: |
|
| 查看次数: |
1638 次 |
| 最近记录: |