内联包含try-catch的方法

时间:2014-04-11 14:40:11

标签: c# performance try-catch .net-4.5

根据此article

  

“使用try / catch / finally块的方法不会内联”

。 .Net 4.5.1是真的吗?如果方法最终没有包含try-catch怎么办? 我用

[MethodImpl(MethodImplOptions.AggressiveInlining)]

用于包含try-catch的内联方法。这是否意味着它们没有在编译代码中内联?

1 个答案:

答案 0 :(得分:1)

AggressiveInlining上的documentation声明如下。

  

如果可能,应该内联该方法。

因此,无论是否附加属性,无法内联的方法都不会内联。实际上,我可以通过一些搜索来判断,JIT编译器的所有可用版本都无法使用try catch块在方法中执行内联,因为除了通常的return语句和结尾之外还添加了额外的退出点。一个void方法。如果这在理论上可以在将来改变,我无法分辨。 finally块的存在与否可能没有区别,因为仍有相同的额外出口点。

最后你真的不应该关心,因为所有这些细节都是你无法触及的实现细节,它们可能随时都会改变 - 我非常有信心.NET JIT编译器没有要求执行或不执行某些优化。如果您希望方法内联,请添加该属性。如果你需要尝试catch块,请使用它们。然后相信编译器做最好的事情,无论如何你没有其他选择。