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

.NET 7新特性的更多相关文章

  1. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  2. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  3. [干货来袭]C#6.0新特性

    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...

  4. CSS3新特性应用之结构与布局

    一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...

  5. 【译】Meteor 新手教程:在排行榜上添加新特性

    原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...

  6. 跨平台的 .NET 运行环境 Mono 3.2 新特性

    Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...

  7. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

  8. es6 新特性2

    es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成 ...

  9. ES6 新特性

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  10. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

随机推荐

  1. 应用DriverManager类创建sqlserver数据库连接实例 JSP中使用数据库

    JSP中使用数据库 1.JDBC介绍 java数据库连接(java Database Connectivity ,JDBC)是一种用于执行SQL语句的JavaAPI ,由一组使用java编程语言编写的 ...

  2. 2022年整理最详细的java面试题、掌握这一套八股文、面试基础不成问题[吐血整理、纯手撸]

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.面向对象 2.JDK.JRE.JVM区别和联系 3.==和equals 4.final 5.String .Strin ...

  3. 齐博x1.3通用栏目名称及参数调用接口

    对于全站的频道可以使用下面的方法取出相应的栏目名称及参数http://qb.net/index.php/cms/wxapp.sorts.html注意,只需要把qb.net换成你的域名,cms 换成其它 ...

  4. 33.ModelSerializer详解

    ModelSerializer特点 根据Model模型的定义,自动生成字段 自动生成相应的验证器 实现create和update 自动默认将关系字段映射成PrimaryKeyRelatedField主 ...

  5. 51单片机-独立按键控制led矩阵的左移和右移

    51单片机学习 独立按键 控制led灯光矩阵的左移和右移 开发板采用的是普中的A2学习开发板,具体的代码如下: typedef unsigned int u16; void delay(u16 tim ...

  6. Xpath 高级用法

    xpath 高级用法 1. 匹配当前节点下的所有: .// . 表示当前 // 表示当前标签下的所有标签 注: 要配合使用 2. 匹配某标签的属性值: /@属性名称 这里以input里的value值为 ...

  7. JVM运行时数据区域详解

    参考文章: <Java Se11 虚拟机规范> <深入理解Java虚拟机-JVM高级特性与最佳实践 第3版>- 周志明 本文基于Java Se 11讲解. 根据<Java ...

  8. C语言嵌套for循环实现冒泡排序

    使用嵌套for循环实现冒泡排序的一个函数. #include<stdio.h> /** * 介绍: * 使用嵌套for循环实现冒泡排序,由小到大(上小下大). * 参数: * sum[]: ...

  9. java反序列化cc_link_one2

    CC-LINK-one_second 前言 这条链子其实是上一条链子的另一种走法,在调用危险函数哪里是没有什么变化的 整体链子 还是尾部没有变化嘛还是InvokerTransformer的transf ...

  10. Ueditor、FCKeditor、Kindeditor编辑器漏洞

    Ueditor.FCKeditor.Kindeditor编辑器漏洞 免责声明: Ueditor编辑器漏洞 文件上传漏洞 XSS漏洞 SSRF漏洞 FCKeditor编辑器漏洞 查看FCKeditor版 ...