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. SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

    项目依赖 SpringBoot 2.5.5 SpringCloud 2020.0.4 Alibaba Spring Cloud 2021.1 Mybatis Plus 3.4.0 Seata 1.4. ...

  2. python爬虫下载小说

    1. from urllib.request import urlopen from urllib import request from bs4 import BeautifulSoup from ...

  3. 制作一个windows垃圾清理小程序

    制作一个windows垃圾清理小程序: 把下列代码保存为.bat文件(如垃圾清理.bat) 双击它就能很快地清理垃圾文件,大约一分钟不到. 就是下面的文字(这行不用复制)=============== ...

  4. 现在入行Java真的还有出路吗?

    现在入行Java还来的及吗?未来该如何抉择? 最近有点迷茫了,互联网好像一夜之间进入了寒冬一样,到处都是就业难的样子,当然,不可否认的是,那些努力的大佬依旧是斩获多个offer,但是,窝就一个小镇做题 ...

  5. 关于入门深度学习mnist数据集前向计算的记录

    import osimport lr as lrimport tensorflow as tffrom pyspark.sql.functions import stddevfrom tensorfl ...

  6. [排序算法] 双向冒泡排序 (C++)

    前言 本文章是建立在冒泡排序的基础上写的,如还有对 冒泡排序 不了解的童鞋,可以看看这里哦~ 冒泡排序 C++ 双向冒泡排序原理 双向冒泡排序 的基本思想与 冒泡排序还是一样的.冒泡排序 每次将相邻的 ...

  7. 使用repo上传代码

    前言~ repo是一款安卓用于管理源码的工具,由python实现,基于git工具 本文介绍了repo的常用使用方式. 一,下载代码 1. repo init 初始化命令 此命令常用选项就那几个,此处取 ...

  8. conky配置(附配置项作用解释)

    alignment top_right #是否嵌入桌面 background yes #是否绘制窗口边框 draw_borders no #窗口边框 border_width 10 #cpu_avg_ ...

  9. Blender修改视野范围

    首先,我不是专门的建模人员.但是有时候会拿到建模人员的制作的模型导入进行修改. 比如简单的删除某个模型,调整模型的尺寸. 还有就是调整模型的建模中心点,这点有时候显得特别重要,模型的中心点偏离较大会给 ...

  10. GKCTF2021 MISC

    1.签到 当时没签上┭┮﹏┭┮: 追踪http流,发现依次执行[ls][ls/][whoami] 发现存在[fl4g],同时发现破解的规则为hex decode->base64 decode-& ...