C# 包含try-catch的内联方法

C# 包含try-catch的内联方法,c#,performance,try-catch,.net-4.5,C#,Performance,Try Catch,.net 4.5,据此, “带有try/catch/finally块的方法将不会内联” 。对于.NET4.5.1来说是这样吗?如果方法包含try-catch而不包含finally怎么办? 我用 用于包含try-catch的内联方法。这是否意味着它们没有在编译代码中内联?上的攻击性内联说明如下 如果可能,该方法应该是内联的 因此,如果方法不能内联,则无论是否附加属性,都不会内联。从一点搜索中我可以看出,所有可用版本的JIT编译器都无法在带有try-catch块的方法中执行内联,因为除了通常的返回语句和void方法的

据此,

“带有try/catch/finally块的方法将不会内联”

。对于.NET4.5.1来说是这样吗?如果方法包含try-catch而不包含finally怎么办? 我用

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

上的攻击性内联说明如下

如果可能,该方法应该是内联的

因此,如果方法不能内联,则无论是否附加属性,都不会内联。从一点搜索中我可以看出,所有可用版本的JIT编译器都无法在带有try-catch块的方法中执行内联,因为除了通常的返回语句和
void
方法的结尾之外,这还会添加额外的退出点。如果这在理论上能在未来发生变化,我无法判断。finally块的存在与否可能没有什么区别,因为仍然有相同的附加出口点

最后,您真的不应该在意,因为所有这些细节都是您无法触及的实现细节,它们可能随时都会发生变化-我非常确信,.NET JIT编译器不需要执行或不执行某一组优化。如果希望方法内联,请添加属性。如果你需要试着用挡块,就用它们。然后信任编译器做最好的事情,反正你没有其他选择

[MethodImpl(MethodImplOptions.AggressiveInlining)]