.NET 7 的新增功能

.NET 7 是 .NET 6 的后继版本,侧重于统一、新式、简单和快速的特点。 .NET 7 将作为标准期限支持 (STS) 版本(以前称为 Current 版本)支持 18 个月。


本文列出了 .NET 7 的新功能,并提供了每个功能的详细信息的链接。


若要查找已针对 .NET 7 更新的所有 .NET 文章,请参阅 .NET 文档:.NET 7 版本的新增功能。


性能

性能是 .NET 7 的一个重点,它的所有功能在设计时都考虑到了性能。 此外,.NET 7 还包括以下纯粹以性能为目标的增强功能:


栈上替换 (OSR) 是对分层编译的补充。 它允许运行时更改当前正在运行的方法在其执行期间(也就是说,当它“在堆栈上”时)执行的代码。 长时间运行的方法可以在执行过程中切换到更优化的版本。

按配置优化 (PGO) 现在适用于 OSR,可以(通过将 <TieredPGO>true</TieredPGO> 添加到项目文件)更轻松地启用。 PGO 还可以检测和优化更过内容,例如委托。

改进了 Arm64 的代码生成。

本机 AOT 以目标平台的文件格式生成独立的可执行文件,没有外部依赖项。 它完全是本机的,没有 IL 或 JIT,并提供快速的启动时间和一个小型的独立部署。 在 .NET 7 中,本机 AOT 侧重于控制台应用,并要求对应用进行剪裁。

对 Mono 运行时的性能改进,这为 Blazor WebAssembly、Android 和 iOS 应用提供了支持。

若要详细了解使 .NET 7 如此快速的许多关注性能的功能,请参阅 .NET 7 中的性能改进博客文章。


System.Text.Json 序列化

.NET 7 在以下方面对 System.Text.Json 序列化进行了改进:


协定自定义,可以更好地控制如何序列化和反序列化类型。 有关详细信息,请参阅自定义 JSON 协定。

用于用户定义类型层次结构的多态序列化。 有关详细信息,请参阅序列化派生类的属性。

支持必需的成员,这些成员是必须存在于 JSON 有效负载中的属性,用于实现成功的反序列化。 有关详细信息,请参阅必需属性。

有关这些更新和其他更新的信息,请参阅 .NET 7 中 System.Text.Json 的新增功能博客文章。


泛型数学

.NET 7 和 C# 11 的创新使你可以常规地执行数学运算,也就是说,无需知道正在使用的确切类型。 例如,如果想编写一个将两个数字相加的方法,在以前,必须为每种类型添加方法的重载。 现在,可以编写一个单一的泛型方法,其中将类型参数约束为类似于数字的类型。 有关详细信息,请参阅泛型数学一文和泛型数学博客文章。


正则表达式

在 .NET 7 中,对 .NET 的正则表达式库的功能和性能进行了重大改进:


使用新选项 RegexOptions.NonBacktracking,可以通过避免回溯并保证处理时间与输入长度呈线性关系的方法进行匹配。 非回溯引擎不能用于从右到左的搜索,而且还有其他一些限制,但对所有正则表达式和输入来说,速度很快。 有关详细信息,请参阅非回溯模式。


正则表达式源生成器是全新的。 源生成器生成一个引擎,该引擎在编译时针对模式进行优化,从而提供吞吐量性能优势。 发出的源是项目的一部分,可以查看和调试它。 此外,还有一个新的源生成器诊断 SYSLIB1045 通知你使用 Regex 的位置,该位置可以转换为源生成器。 有关详细信息,请参阅 .NET 正则表达式源生成器。


对于不区分大小写的搜索,.NET 7 具有较大的性能提升。 这是因为指定 RegexOptions.IgnoreCase 不再对模式中的每个字符和输入中的每个字符调用 ToLower。 相反,所有与大小写相关的工作都在构造 Regex 时完成。


Regex 现在支持一些 API 的跨度。 作为此项支持的一部分,增加了以下新方法:


Regex.EnumerateMatches

Regex.Count

Regex.IsMatch(ReadOnlySpan<Char>)(和一些其他重载)

有关这些改进和其他改进的详细信息,请参阅 .NET 7 中的正则表达式改进博客文章。