2022年11月份微软推出了带有STS(标准期限支持)的.NET版本7,仅提供18个月的支持。

微软今年推出了STS版本,因为它已经在2019年提到,它将在每年11月左右发布一个新版本的.NET。

但是,考虑到新的官方.NET7功能和更新,它仍然为用户带来了大量变化和.NET7性能改进。今天给大家分享.NET 7与.NET 6之间的几个值得注意的差异如下:

一、On-stack replacement(OSR)

允许在执行过程中更改已执行的代码。我们可以对于长时间正在运行的方法在执行过程中转换到更新的版本。

堆栈替换背后的思想是,方法不仅可以在调用之间进行替换,甚至可以在它执行时进行替换,而它“在堆栈上”。

除了对0级代码进行调用计数检测外,还对循环进行迭代计数检测。当迭代超过某个限制时,JIT编译该方法的新高度优化版本,将所有本地/寄存器状态从当前调用转移到新调用,然后跳转到新方法中的适当位置。

具体可以看这篇链接的详细介绍

https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/

二、Regex Improvements(正则改进和提升)

具体可以参考这个链接

https://devblogs.microsoft.com/dotnet/regular-expression-improvements-in-dotnet-7/

 三、Simplified LINQ Ordering 简化的LINQ排序

LINQ排序同时支持IQueryable 和 IEnumerable

看一个示例代码

var data = new[] { 2, 1, 3 };
var sorted = data.Order();
var sortedDesc = data.OrderByDescending();

四、Dynamic PGO(profile-guided optimization) Improvements 

动态PGO旨在对静态PGO进行一些关键更改。

动态PGO利用了分层编译。JIT使用0级代码来跟踪方法被调用的次数,或者在循环的情况下,跟踪循环执行的次数。它还可以将其用于其他用途。

例如,它可以精确地跟踪哪些具体类型被用作接口分派的目标,然后在第1层中专门化代码以期望最常见的类型。

启用和禁用PGO,性能差异很大。

五、Reflection Improvements(反射性能提升)

MethodBase.Invoke,通过获取一个MethodBase(例如MethodInfo)对象,该对象表示调用方先前查询的某个方法,并使用运行时需要封送至被调用方的任意参数和需要封送回的任意返回值来调用它。

性能提升了一个数量级

反射还涉及对类型、方法、属性等的对象的大量操作,在使用这些API时可能会产生明显的差异。

另外还有一个Activator.CreateInstance,它将AssemblyName的大部分底层支持从本机运行时代码转移到了CoreLib中的托管代码中。这反过来又会影响使用它的任何东西,例如当使用Activator.CreateInstance重载时,这些重载采用需要解析的程序集名称。

官方提供了一个示例代码,来测试这个方法的性能提升

private readonly string _assemblyName = typeof(MyClass).Assembly.FullName;
private readonly string _typeName = typeof(MyClass).FullName;
public class MyClass { } [Benchmark]
public object CreateInstance() => Activator.CreateInstance(_assemblyName, _typeName);

 六、Application Trimming Improvements (应用大小修剪)

修剪特定应用程序中不需要的内容,并制作一个较小的应用程序,从而提供较小的.exe。

 七、Memory Caching Improvements

内存缓存改进,这是专门针对ASP.NET的,但这是对如何进行内存缓存的改进。

 八、Minimal APIs 改进

  • 输出缓存
  • 速率限制:在您必须手动写入队列之前,现在只需速率限制您自己的应用程序,然后管理您的呼叫速率—您的依赖关系和更好的用户体验
  • 以最少的API上载文件
  • 在最少的API中改进开放API
  • 路由筛选器处理
  • 改进的依赖注入
  • ASP.NET核心的一些改进,如MVC和Blazor Pages的可空模型

还有其他很多新的特性,比如说支持TAR File创建,Blazor的升级、加解密算法等。

周国庆

2023/1/15

最新文章

  1. Linux C编程学习之开发工具2---GDB调试器
  2. jQuery实践树(2)
  3. Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
  4. ViewPager 的页面重置问题
  5. 15个Linux Wget下载实例终极指南
  6. Xcode4 使用技巧
  7. 关于spring mvc MaxUploadSizeExceededException 死循环解决方案
  8. django访问sqlserver中的坑
  9. andorid 开放工具集合
  10. 在Mac OS 下 build Tesseract4.0 源码并在命令行中使用
  11. LVS集群DR模式实例(4)
  12. Flask 学习 十五 性能
  13. jmeter 之 if controller
  14. MVC和WEBAPI(一)
  15. FI配置步骤清单
  16. [转载] 相机越贵画质越好?聊聊CMOS设计
  17. hdu 1498 50 years, 50 colors(二分匹配_匈牙利算法)
  18. MySQL5.6之Index Condition Pushdown(ICP,索引条件下推)-Using index condition
  19. Redis资料汇总(转)
  20. redis源码搭建以及配置主从服务器

热门文章

  1. token字段,请务加在请求地址的头部header
  2. 齐博x1嵌套-循环栏目,并列出子栏目下的内容
  3. app自动化测试环境安装
  4. JMETER与它的组件们
  5. vue使用elementUI组件提交表单(带图片)到node后台
  6. MPC:百万富翁问题
  7. fltp备份文件后统计验证
  8. npm卸载"Tracker idealTree already exists"
  9. 论文复现|Panoptic Deeplab(全景分割PyTorch)
  10. python进阶(29)单例模式