.NET C#基础教程第18天:AggressiveInlining特性

作者:微信公众号:【架构师老卢】
6-10 9:13
25

概述:介绍提高应用程序性能的技术之一涉及该属性的使用。它会影响实时 (JIT) 编译器的行为,以提高关键方法的执行速度。AggressiveInlining学习目标没有 AggressiveInlining 属性的示例具有 AgressiveInlining 属性的示例何时使用 AggressiveInlining开发人员的先决条件基本了解 C# 编程语言。开始没有 AggressiveInline 的示例考虑一个将其输入乘以 2 的简单方法:private int MultiplyByTwo(int value){ return value * 2;}如果没有该属性,JIT 编译器可能会也可

介绍

提高应用程序性能的技术之一涉及该属性的使用。它会影响实时 (JIT) 编译器的行为,以提高关键方法的执行速度。AggressiveInlining

学习目标

  • 没有 AggressiveInlining 属性的示例
  • 具有 AgressiveInlining 属性的示例
  • 何时使用 AggressiveInlining

开发人员的先决条件

  • 基本了解 C# 编程语言。

开始

没有 AggressiveInline 的示例

考虑一个将其输入乘以 2 的简单方法:

private int MultiplyByTwo(int value)
{
    return value * 2;
}

如果没有该属性,JIT 编译器可能会也可能不会内联此方法。该方法未内联,方法调用的开销可能会影响应用程序的整体性能。AggressiveInlining

具有 AggressiveInlining 的示例

通过使用属性标记方法,它可以显式向 JIT 编译器发出信号:AggressiveInlining

using System.Runtime.CompilerServices;

[MethodImpl(MethodImplOptions.AggressiveInlining)]
private int MultiplyByTwo(int value)
{
    return value * 2;
}

在此方案中,JIT 编译器将内联该方法,从而减少开销并提高经常调用此方法的代码的性能。

何时使用 AggressiveInlining

虽然可以成为优化方法的强大工具,但应谨慎使用。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

相关代码下载地址
重要提示!:取消关注公众号后将无法再启用回复功能,不支持解封!
第一步:微信扫码关键公众号“架构师老卢”
第二步:在公众号聊天框发送code:34638,如:code:34638 获取下载地址
第三步:恭喜你,快去下载你想要的资源吧
阅读排行