根据本文
"带有try/catch/finally块的方法不会内联"
这是真的吗。净4.5.1?如果方法包含try-catch而不包含finally怎么办?我使用
[MethodImpl(MethodImplOptions.AggressiveInlining)]
用于内联包含try-catch的方法。这是否意味着它们没有内联在编译的代码中?
AggressiveInlining
的文档说明如下。
如果可能的话,应该内联该方法。
因此,如果方法不能在中内联,则无论是否附加属性,都不会内联。根据我的搜索,事实上,所有可用版本的JIT编译器都无法在带有try-catch块的方法中执行内联,因为这除了通常的返回语句和void
方法的末尾之外,还添加了额外的出口点。如果这种情况在未来理论上会改变,我无法判断。finally块的存在与否可能没有什么区别,因为仍然有相同的额外出口点。
最后,你真的不应该在意,因为所有这些细节都是你无法触及的实现细节,它们可能随时发生变化——我很有信心,对a没有要求。NET JIT编译器来执行或不执行某一组优化。如果您希望方法内联,请添加属性。如果你需要尝试抓块,就用它们。然后相信编译器会做最好的事情,无论如何你都没有其他选择。