根据此article
“使用try / catch / finally块的方法不会内联”
。 .Net 4.5.1是真的吗?如果方法最终没有包含try-catch怎么办? 我用
[MethodImpl(MethodImplOptions.AggressiveInlining)]
用于包含try-catch的内联方法。这是否意味着它们没有在编译代码中内联?
答案 0 :(得分:1)
AggressiveInlining
上的documentation声明如下。
如果可能,应该内联该方法。
因此,无论是否附加属性,无法内联的方法都不会内联。实际上,我可以通过一些搜索来判断,JIT编译器的所有可用版本都无法使用try catch块在方法中执行内联,因为除了通常的return语句和结尾之外还添加了额外的退出点。一个void
方法。如果这在理论上可以在将来改变,我无法分辨。 finally块的存在与否可能没有区别,因为仍有相同的额外出口点。
最后你真的不应该关心,因为所有这些细节都是你无法触及的实现细节,它们可能随时都会改变 - 我非常有信心.NET JIT编译器没有要求执行或不执行某些优化。如果您希望方法内联,请添加该属性。如果你需要尝试catch块,请使用它们。然后相信编译器做最好的事情,无论如何你没有其他选择。