假设我有一个递归方法或静态方法。性能可以内联吗?它可能包含一个单行条件运算符。
答案 0 :(得分:0)
这取决于功能的作用..
如果它是因子:(5!)== 5 * 4 * 3 * 2 * 1你可以用以下方式书写:
@Insert(onConflict = OnConflictStrategy.REPLACE)
OR:
private static int Factorial(int v)
{
if (v == 1)
return v;
return v * Factorial(v - 1);
}
但是 - 我确定并非所有功能都可以转移。 至于表现,第一个需要3个mili,n = 80,第二个需要0 mili ...所以是的 - 正如你所假设的那样有一个优势。
编辑: 我看到你现在放了一个“Tail recressions”的标签,当它悬停在标签上时 - 告诉你答案。是的编译器知道如何将这些递归转换为“内联”。我的时间测试指的是“调试”模式..也应该在发布中进行测试..
答案 1 :(得分:0)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int DoSomething()
{
return 0;
}
答案 2 :(得分:0)
即使您希望编译器内联您的方法。并非所有方法都可以内联。在这种情况下,递归方法不能是内联方法,因为它需要调用自身。
<强> AggressiveInlining 强>
指定应尽可能内联方法。
内联是用方法内容替换方法调用,因此不能内联递归方法。