.NET 9 发布 性能提升、AI 支持与全方位改进

前言

.NET 9 正式发布,这是迄今为止最高效、现代、安全、智能且高性能的 .NET 版本。

新版本凝聚了全球数千名开发者的共同努力,包含了数千项性能、安全性和功能性改进。

主要亮点

  • 性能提升:全面提升性能,降低内存使用。
  • 安全性增强:显著的安全性改进。
  • AI 支持:轻松将 AI 集成到应用程序中。
  • 全面改进:涵盖编程语言、开发工具和工作负载,提供统一的开发平台。

.NET Conf 2024 大会

.NET Conf 2024 免费参加我们的三天虚拟开发者大会(11 月 12-14 日),深入了解 .NET 9 的新功能。

地址:https://www.dotnetconf.net/

让我们一起看看 .NET 9 中新增的功能和工具的亮点。

.NET 9 运行时性能改进、更低的内存占用

.NET 9 是迄今为止性能最高的 .NET 版本,进行了 1,000 多项与性能相关的改进,并采用了更高效的算法来生成更好的代码。

Stephen Toub 深入探讨了这些改进,值得阅读。

  • 服务器 GC 优化

服务器 GC 现在根据应用程序的实际内存需求进行调整,而不是依赖于环境中的资源(内存和 CPU)。这一变化特别适用于高核心数环境,尤其是在应用程序内存需求较小或随时间变化较大的情况下。

这种新的 GC 实现减少了内存使用量,但可能会带来轻微的吞吐量成本。用户可以选择配置服务器 GC 使用旧版实现,以进行测试。

  • 性能提升

TechEmpower 基准测试显示,.NET 9 在吞吐量上显著提高,同时内存使用量大幅下降,这主要得益于服务器 GC 的优化。

  • 矢量化和硬件支持

.NET 9 回归矢量化,增加了对 Arm64 SVE、Intel AVX10 等新芯片的支持,以及硬件加速运行时。

  • RyuJIT 性能提升

RyuJIT 提高了 Arm64、循环、PGO 和边界检查的性能。异常处理速度提高了 50%。

  • 动态 PGO 更新

动态配置文件引导优化 (PGO) 更新,优化更多代码模式。JIT 为常见类型转换生成快速路径代码,使执行速度提高 70%,但需要禁用 ReadyToRun。

  • LINQ 优化

LINQ 方法如 TakeDefaultIfEmpty 在空集合时返回速度提高了 10 倍。Enumerable.SequenceEqual 通过 MemoryExtensions.SequenceEquals 实现高效的迭代和矢量化,现在支持 List<T>

  • System.Text.Json 优化

System.Text.Json 的各种操作性能提升了超过 50%。JsonProperty.WriteTo 直接写入 UTF8 字节,减少字符串分配。

新 API JsonMarshal.GetRawUtf8Value 替代 JsonElement.GetRawText,避免额外的编码和分配。

JsonObject 优化了内存分配和调整大小的成本。

.NET Aspire -- 开发更好应用程序的基础组件

.NET Aspire 是一组强大的工具、模板和包,用于无缝开发可观察、生产就绪的应用程序。

自首次发布以来的六个月内,我们对堆栈的所有部分进行了改进,包括遥测和指标仪表板的新功能以及更简化的云应用程序部署。

新功能

从仪表板启动和停止资源。

在调试会话之间保持容器处于活动状态。

新的 API,如 WaitFor,更好地管理资源启动。

新集成

与 OpenAI、Ollama、Milvus 等无缝集成。

简化获取

更轻松地将 .NET Aspire 集成到应用程序中。

改进了 Azure 容器应用程序的部署方案。

预览支持 Azure Functions。

广泛采用

微软内部:Xbox 和 Copilot 团队已将 .NET Aspire 集成到他们现有的服务中,通过易于访问的见解和 Azure 集成收紧了内部开发循环。

社区:.NET Aspire 被广泛采用,社区积极参与并贡献了新的工具和集成。

人工智能------不断发展和进步的 AI 生态系统

.NET 功能不断扩展 ,以帮助我们注入人工智能,主要进展包括:

学习材料和示例

提供新的学习材料和示例,简化与生态系统集成的过程。

合作伙伴和社区

与 Azure、OpenAI、LlamaIndex、Qdrant、Pinecone、Milvus、AutoGen、OllamaSharp、ONNX Runtime 等合作伙伴合作,构建强大的 AI 生态系统。

与社区和控件供应商合作,构建智能组件生态系统,使 AI 集成更加容易。

行业采用

H&R Block、Blip 和 KPMG 等公司已采用 .NET 构建顶级 AI 体验。

.NET 支持 GitHub Copilot 和全新的 Microsoft Copilot 体验。

无缝部署

将 AI 解决方案部署到云端变得更加无缝。

.NET 9 中的 AI 生态系统扩展

强大的生态系统意味着开发人员有更多选择来决定最适合他们的场景。为了简化这些集成并降低进入障碍,我们与 Semantic Kernel 合作,在 Microsoft.Extensions.AIMicrosoft.Extensions.VectorData 下引入了一组抽象,为与 AI 服务交互提供统一的 C# 抽象层。这些抽象支持小型和大型语言模型(SLM 和 LLM)、嵌入、向量存储和中间件。早期采用者如 Pieces 和 OllamaSharp 已经受益于这种新的简化方法。

张量和分词器

在 .NET 9 中,我们对库和基元类型进行了重大改进,以改进 AI 开发:

**张量:**引入了新的 Tensor<T> 类型,用于表示多维数据,简化了库和应用操作之间的互操作。

分词器:Microsoft.ML.Tokenizers 支持多种标记化算法,包括字节级 BPE、SentencePiece 和 WordPiece。改进了对流行模型系列(如 GPT(4、o1 等)、Llama、Phi 和 Bert)的标记器支持。

降低进入门槛

随着语言模型即服务的兴起,开发人员使用人工智能的进入门槛大大降低。我们提供的这些新构建块旨在帮助开发人员更轻松地集成和使用 AI 服务。

快速开始

如感兴趣的朋友可以浏览

AI 文档:https://devblogs.microsoft.com/dotnet/announcing-dotnet-9/aiextensions.svg

.NET 的 AI 示例:https://devblogs.microsoft.com/dotnet/announcing-dotnet-9/aiextensions.svg

针对 .NET 开发人员的 GitHub Copilot 增强功能

GitHub Copilot 通过改善编辑器体验并在常规工作流程中为 .NET 开发人员提供 AI 帮助,显著提高了工作效率。

最新版本的 Visual Studio 和 Visual Studio Code 以及 GitHub Copilot 的更新,带来了以下新功能:

  • AI 智能变量检查
  • 通过集成 AI 变量检查优化调试工作流程。
  • AI 驱动的 IEnumerable 可视化工具
  • 在 IEnumerable 可视化工具中,提供 AI 驱动的 LINQ 可编辑表达式。
  • 使用 GitHub Copilot 修复代码
  • GitHub Copilot 帮助解决代码问题。
  • 更好的 C# 人工智能补全
  • GitHub Copilot 从相关源文件中引入额外的上下文,改进 C# 补全。
  • 使用 GitHub Copilot 调试测试
  • 通过 GitHub Copilot 的调试测试功能,获取调试失败测试的帮助。

ASP.NET Core 和 Blazor 进行全栈 Web 开发

ASP.NET Core 是 .NET 全栈 Web 框架,提供现代 Web 应用程序和可扩展后端服务所需的一切。

.NET 9 带来了新功能以及显著的性能、可访问性和安全性改进。

优化静态文件处理

在构建和发布期间优化静态 Web 资源(如 JavaScript 和 CSS 文件),通过向文件名添加基于内容的哈希生成指纹版本,确保文件名唯一并避免使用过时版本。

发布时使用 Brotli 预压缩文件,减少下载大小并减轻服务器负担。

使用端点路由处理静态文件,支持每端点授权等高级功能。

Blazor 改进性能提升

  • 性能在所有领域都有所改进。

  • 新的 Blazor 混合和 Web 应用模板。

  • 新 API 使开发人员能够创建更流畅的用户体验。

组件渲染模式检测

  • 使用 RendererInfo API 在运行时检测组件渲染模式,预渲染期间禁用或隐藏交互元素,组件交互后启用它们。

重新连接体验

  • Blazor Server 应用程序受益于更友好的 UI、更快的重新连接和自动处理连接丢失时的页面重新加载。

OpenAPI 增强功能

内置 OpenAPI 支持

  • 使用 Microsoft.AspNetCore.OpenAPI 包自动生成 OpenAPI 文档,元数据从应用程序代码、属性和扩展方法中提取。

  • 支持对操作、模式或整个文档进行定制。

  • Minimal API 应用程序中支持原生 AOT,优化性能。

  • 构建时生成 OpenAPI 文档,集成到本地开发工作流程中。

安全性改进开发证书设置

  • 在 Linux 上更轻松地设置受信任的开发证书,启用 HTTPS。

身份验证状态传输

  • Blazor 提供内置 API 用于将身份验证状态传输到客户端。

OAuth 和 OIDC 支持

  • 支持向 OAuth 和 OIDC 授权请求添加额外参数,以及对推送授权请求 (PAR) 的支持。

数据保护和连接指标

  • 强化数据保护支持。

  • 改进 Kestrel 的连接指标,便于检测连接失败原因。

.NET MAUI -- 增强多平台应用程序开发

.NET MAUI 是使用 .NET 跨移动和桌面构建多平台应用程序的终极工具。

.NET 9 的主要目标是提高质量和可靠性,使您能够更轻松地在生产中交付应用程序。

社区参与和贡献

  • 使用 .NET MAUI 构建的应用程序在 Google Play 商店中的数量翻倍。

  • 开发人员使用率增长了 30% 以上,达到历史最高水平。

  • 社区参与度和贡献显著增加。

  • Syncfusion 自今年 7 月到 9 月开始贡献,占所有社区贡献的 55%,比前 3 个月增长了 557%。

新项目模板

  • 引入全新的项目模板,包含 14 个免费开源 Syncfusion 控件和其他社区流行库。

  • 演示 MVVM、数据库访问、导航、视图刷新等推荐实践,帮助快速启动应用程序开发。

性能和可靠性增强

  • 全面改进 .NET MAUI 的性能,包括 iOS 和 Mac Catalyst 的新实现CollectionViewCarouselView

  • 更新现有控件和应用程序生命周期,支持本机 AOT 和修剪增强功能,构建更小、更快的应用程序。

平台支持

  • 支持最新的 iOS、macOS 和 Android 操作系统。

  • 添加了多种本机平台功能,如 Android Asset Pack、改进的与本机库的互操作性,以及通过新 Xcode dotnet 工具简化 Xcode 和 Visual Studio Code 之间的集成。

使用 .NET 9 进行 Windows 开发

借助 .NET 9 的 Windows 应用程序将能够访问最新的操作系统特性和功能,同时确保更高的性能和可访问性。无论是使用 WinUI 3 和 Windows App SDK 构建新的现代应用程序,还是对现有的 WPF 和 WinForms 应用程序进行现代化改造,.NET 9 都能提供最佳支持。

WinUI 3

本机 AOT 支持,实现更小、性能更高的应用程序。

WPF

Fluent UI 现代主题增强,提升用户界面体验。

WinForms

新增深色模式、现代图标 API 和改进的异步 API 访问(如 Control.InvokeAsync)。

C# 13 和 F# 9 新功能

C#是世界上最受欢迎和喜爱的编程语言之一。

C# 13 专注于让我们能够更轻松、更安全、更快速地编写代码。

集合表达式

params修饰符现在支持任何受支持的集合类型,而不仅仅是数组。

高性能代码

通过使用 ref struct 和 System.Threading.Lock,解锁更高性能的代码和更轻松的多线程应用。

复制代码
Lock myLock = new();
​
void Concat<T>(params List<T> items)
{
    lock (myLock)
        Console.WriteLine(string.Join("\e[1mItem: \e[0m", items));
}

F# 9 继续为 .NET 开发人员提供最佳的函数式编程体验。

主要改进包括:

可空引用类型:与 C# 库的交互更加类型安全。

优化的整数范围:加快循环和其他推导式的速度。

优化的相等检查:避免装箱,提高常见操作的性能。

自动生成的 .Is* 属性:为受歧视的联合提供快速案例测试。

标准库增强:包含集合的随机函数,适用于数据科学和游戏开发。

改进的诊断和工具:提高开发人员的生产力。

复制代码
// FS3261: Nullness warning: The types 'string' and 'string | null' do not have equivalent nullability.
let methodArgument (s: string | null) = File.Create s
let matchNullableString(s: string | null) =    
    match s with  
    | null -> 0
    | notNull -> notNull.Length // notNull is of type string

.NET 9 开发工具更新

.NET 9 附带了多项开发工具更新,旨在提高开发人员的工作效率。

Visual Studio 2022 17.12

  • 性能提升:显著提升性能,提高开发效率。

  • 调试和诊断:增强的调试和诊断体验。

  • .NET Aspire 集成:与 .NET Aspire 更紧密的集成。

  • 云集成:更深入的云集成。

  • C# 13 支持:支持 C# 13 的新功能。

  • Git 支持:增强的 Git 支持。

  • 用户请求功能:包含大量用户请求的功能。

Visual Studio Code 的 C# 开发工具包

  • 编辑可靠性:改进编辑可靠性。

  • NuGet 包管理:增强的 NuGet 包管理。

  • 测试适配器:增强的测试适配器和代码覆盖率结果。

  • .NET MAUI 支持:改进的 .NET MAUI 开发支持。

  • 项目启动/调试:升级的项目启动和调试配置。

.NET CLI 改进

  • 终端记录器:全面改进终端记录器,包括可点击链接、持续计时器和颜色编码。

  • 简洁输出:记录器输出更加简洁,提供失败和警告总数的摘要。

  • 软件包审计:dotnet restore更新,审核顶级依赖项和传递依赖项的软件包漏洞。

  • 中央包管理:与中央包管理完美配合,快速将包升级部署到所有项目。

  • 漏洞警报:在终端、Visual Studio 和 CI/CD 管道中提供包漏洞警报,由 GitHub Advisory Database 驱动。

立即体验 .NET 9 相关内容

.NET 9 以及 Visual Studio 2022 和 Visual Studio Code 的 C# 开发工具包的更新现已发布。

下载链接

了解新增功能

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号**[DotNet技术匠]** 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

**译文:**https://devblogs.microsoft.com/dotnet/announcing-dotnet-9/

相关推荐
边缘计算社区16 分钟前
奥迪:在工业边缘使用 VMware 边缘计算堆栈
人工智能·边缘计算
说私域22 分钟前
基于社交关系的电商平台发展与创新:以微店买家版为例兼论开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序
人工智能·小程序
啊文师兄33 分钟前
使用 Pytorch 搭建视频车流量检测资源(基于YOLO)
人工智能·pytorch·yolo
使者大牙1 小时前
【LLM学习笔记】第三篇:模型微调及LoRA介绍(附PyTorch实例)
人工智能·pytorch·python·深度学习
Elastic 中国社区官方博客1 小时前
Elasticsearch 和 Kibana 8.16:Kibana 获得上下文和 BBQ 速度并节省开支!
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
陌上阳光1 小时前
动手学深度学习69 BERT预训练
人工智能·深度学习·bert
车载诊断技术1 小时前
电子电气架构--- 实施基于以太网的安全车载网络
网络·人工智能·安全·架构·汽车·电子电器架构
学步_技术1 小时前
自动驾驶系列—自动驾驶车辆的姿态与定位:IMU数据在复杂环境中的关键作用
人工智能·自动驾驶·imu
开发者每周简报2 小时前
当微软windows的记事本被AI加持
人工智能·windows·microsoft
沉下心来学鲁班2 小时前
欺诈文本分类检测(十八):基于llama.cpp+CPU推理
人工智能·语言模型·分类·cpu·llama.cpp