提高应用程序性能的技术之一涉及该属性的使用。它会影响实时 (JIT) 编译器的行为,以提高关键方法的执行速度。AggressiveInlining
考虑一个将其输入乘以 2 的简单方法:
private int MultiplyByTwo(int value)
{
return value * 2;
}
如果没有该属性,JIT 编译器可能会也可能不会内联此方法。该方法未内联,方法调用的开销可能会影响应用程序的整体性能。AggressiveInlining
通过使用属性标记方法,它可以显式向 JIT 编译器发出信号:AggressiveInlining
using System.Runtime.CompilerServices;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private int MultiplyByTwo(int value)
{
return value * 2;
}
在此方案中,JIT 编译器将内联该方法,从而减少开销并提高经常调用此方法的代码的性能。
虽然可以成为优化方法的强大工具,但应谨慎使用。AggressiveInlining
过度使用或不当使用该属性可能会导致更大的代码大小(代码膨胀),这可能会通过影响缓存利用率而对性能产生负面影响。
最好保留用于小而关键的方法,在这些方法中,内联的优点大于潜在的缺点。AggressiveInlining
添加一个名为 “” 的类,其中包含两个方法,如下所示,突出显示了具有 AggressiveInlining 的方法和具有 not 的方法之间的区别。AggressiveInlining
public static class AggressiveInlining
{
public static int MultiplyByTwo(int value)
{
return value * 2;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int MultiplyByTwoWithAggressiveInlining(int value)
{
return value * 2;
}
}
从 main 方法调用,如下所示
#region Day 18: AggressiveInlining Attribute
AggressiveInlining.MultiplyByTwo(10);
AggressiveInlining.MultiplyByTwoWithAggressiveInlining(10);
#endregion
源代码获取:公众号回复消息【code:34638
】