.NET 7 为C# 11/F# 7、.NET MAUI、ASP.NET Core/Blazor、Web API、WinForms、WPF 等应用程序带来了更高的性能和新功能。使用 .NET 7,您还可以轻松地将 .NET 7 项目容器化,在 GitHub 操作中设置 CI/CD 工作流,并实现云原生可观察性。
.NET 7 中的新功能
在这篇博文中,我们将重点介绍 .NET 团队专注于交付的主要主题:
统一:一个 BCL、新的 TFM、对 ARM64 的本机支持、Linux 上增强的 .NET 支持
现代:持续的性能改进、开发人员生产力增强,例如容器优先的工作流程、从相同的代码库构建跨平台的移动和桌面应用程序
.NET 适用于云原生应用:易于构建和部署分布式云原生应用
简单:使用 C# 11 简化和编写更少的代码、针对云原生应用程序的 HTTP/3 和最小 API 改进
性能:多项性能改进
下面,我们将更详细地介绍这些主题,并分享更多关于这项工作为何如此重要的背景信息。
场景
.NET 7 用途广泛,您可以在任何平台上构建任何应用程序。
让我们重点介绍从今天开始可以使用 .NET 实现的一些场景:
从在浏览器中运行的 React 代码调用现有.NET库,通过包含经过优化以在 WebAssembly 上运行的流线型 .NET运行时。
使用强类型 C#访问存储在 SQL Server 数据库中的 JSON 文档的内容。
只需编写几行代码,即可快速构建和部署使用 OpenAPI 自动记录的安全 REST 端点。
使用 Ahead of Time (AOT) 编译从 C# 源代码生成简化的本机应用程序,并直接发布到容器映像。
运行一个 .NET Core 应用程序,该应用程序使用内置 API 将内容压缩并存档到 Linux 友好的文件gz中。
使用为每个目标平台创建本机代码和组件的单一代码库和设计,实现您对 Android、iOS 和 Windows 上的移动应用程序的愿景。
通过使用升级助手自动迁移旧版应用程序并在 CoreWCF 的帮助下现代化您的 Windows Communication Foundation (WCF) Web 服务,获得.NET 7 的性能优势。
使用反映您的架构和设计选择的样板模板,让开发人员比以往任何时候都更容易启动新应用程序。
使用ReadKey 在 Unix/Linux 中更好地处理组合键和修饰键。
统一
一个基类库 (BCL)
.NET 7 版本是我们 .NET 统一之旅中的第三个主要版本(自 2016 年 .NET 5 以来)。
使用 .NET 7,您只需学习一次,就可以通过一个 SDK、一个运行时、一组基础库重复使用您的技能来构建多种类型的应用程序(云、Web、桌面、移动、游戏、IoT 和 AI)。
面向 .NET 7
当您以应用程序或库中的框架为目标时,您正在指定要提供的 API 集。要以 .NET 7 为目标,只需更改项目中的目标框架即可。
<TargetFramework>net7.0</TargetFramework>
针对 net7.0 Target Framework Moniker (TFM) 的应用程序将在所有受支持的操作系统和 CPU 架构上运行。它们使您可以访问 .NET 7 中的所有 API 以及一堆特定于操作系统的 API,例如:
net7.0-android
net7.0-ios
net7.0-maccatalyst
net7.0-macos
net7.0-tvos
net7.0-windows
通过 net7.0 TFM 公开的 API 旨在随时随地工作。如果您怀疑 .NET 7 是否支持 API,您可以随时查看。这是一个新添加的接口 IJsonTypeInfoResolver 的示例,您可以看到它现在已内置到 .NET 7 中:
ARM64
随着行业向 ARM 发展,.NET 也是如此。ARM CPU 的最大优势之一是电源效率。这以最低的功耗带来最高的性能。换句话说,您可以事半功倍。在 .NET 5 中,我们描述了我们针对 ARM64 所做的性能计划。现在,在两个版本之后,我们想与您分享我们已经走了多远。我们的持续目标是将 x64 的性能与 ARM64 相匹配,以帮助我们的客户将他们的 .NET 应用程序迁移到 ARM。
运行时改进
我们在调查 x64 和 ARM64 时遇到的一个挑战是发现无法从 ARM64 机器正确读取 L3 缓存大小。当无法从操作系统或机器的 BIOS 中获取 L3 缓存大小,我们通过更改启发式方法以返回近似大小。现在我们可以更好地估计每个 L3 缓存大小的内核数。
Core count | L3 cache size |
1~4 | 4MB |
5~16 | 8MB |
17~64 | 16MB |
65+ | 32MB |