架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 22|回复: 0

[技巧] .NET/C# 之 MethodImplOptions.AggressiveInlining 性能优化

[复制链接]
发表于 昨天 11:23 | 显示全部楼层 |阅读模式
需求:查看 .NET 源代码的时候,发现一些方法添加了 [MethodImpl(MethodImplOptions.AggressiveInlining)] 特性,然看了 MethodImpl 特性可以影响 JIT 编译器的行为。根据网上的资料进行了一些测试。
.NET 中 JIT 和 AOT 编译介绍和区别
https://www.itsvse.com/thread-10734-1-1.html

MethodImplOptions 配置

QQ截图20250630111553.jpg

代码:

内联函数

在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。另外还需要特别注意的是对递归函数的内联扩展可能引起部分编译器的无穷编译。

MethodImplOptions.AggressiveInlining

作用:建议 JIT 编译器尽可能地将该方法内联(inline)。
解释:内联是指将一个函数调用替换为函数体本身,从而减少函数调用的开销。
适用场景:适用于小型、频繁调用的方法(例如属性访问器、简单的数学计算等)。
注意:这只是一个“建议”,JIT 编译器可能会根据实际情况决定是否真正进行内联。

测试“内联”和“不内联”结果如下:

QQ截图20250630111837.jpg QQ截图20250630110811.jpg

测试代码如下:

发现内联后 CPU 使用率比非内联调用占用低的多,其实,也不用过于焦虑,现在的编译器都非常智能,即使不加该特性,编译器也可能会帮你去自动优化




上一篇:【译】.NET/C# 中 MySqlConnector 和 MySql.Data 为什么前者胜出
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2025-7-1 01:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表