.NET 8.0 中有哪些新的变化?
.NET 8.0 新变化全解析
在软件开发的世界里,技术的迭代更新总是能带来新的惊喜和挑战。.NET 8.0 作为.NET 系列的重要版本,引入了众多令人瞩目的新特性和改进。今天,我们就一起来深入探讨.NET 8.0 中有哪些新的变化。
一、性能提升:全面进化的动力
动态配置文件引导优化(PGO)
.NET 8 默认启用了动态配置文件引导优化(PGO)的新代码生成器。这一特性就像是给代码配备了一位智能导航员,它能够根据实际使用情况对代码进行优化,最高可将应用程序的性能提升 20%。想象一下,代码就像一辆汽车,PGO 就是优秀的驾驶员,能让汽车在不同的路况下都能发挥出最佳性能。
AVX - 512 指令集支持
支持 AVX - 512 指令集是.NET 8 在性能方面的又一重大突破。它就像给计算机增加了多条并行的高速公路,能够对 512 位数据向量执行并行操作,大大缩短了数据处理时间,让计算机能够在更短的时间内处理更多的数据。
原始类型的 UTF - 8 处理能力
原始类型现在实现了新的可格式化和可解析接口,能够直接格式化和解析为 UTF - 8,无需任何转码开销。这就好比给数据传输开辟了一条绿色通道,让数据的处理更加高效、流畅。
二、.NET Aspire:构建云原生应用的新利器
.NET Aspire 是一个专门用于构建弹性、可观察和可配置的云原生应用程序的堆栈。它包含了一组针对云原生增强的精选组件,默认具备遥测、弹性、配置和运行状况检查等功能。这就像是为云原生应用开发提供了一套完整的工具箱,让开发者能够在开发的第一天和第一百天,都能轻松地发现、获取和配置云原生应用程序的基本依赖项。
三、容器增强:更安全、紧凑、高效
安全提升
使用.NET 打包容器应用变得更加轻松和安全。每个.NET 映像都包含一个非 root 用户,通过单行配置就能启用更安全的容器。这就好比给容器加上了一把坚固的锁,有效防止了潜在的安全威胁。
部署优化
.NET SDK 工具无需 Dockerfile 即可发布容器映像,并且默认是非 root 的。同时,.NET 基础映像更小,使得容器化应用程序的部署速度更快。新的实验变体映像甚至能为本机 AOT 提供真正最小的应用程序大小,就像给应用程序做了一次瘦身手术,让它更加轻盈。
安全强化
选择使用新的 Chiseled Ubuntu 映像变体,可以进一步减少攻击面,为应用程序提供更高级别的安全防护。
架构兼容性
无论是使用 Dockerfile 还是 SDK 工具,都能为任何架构构建应用程序和容器映像,充分满足不同用户的需求。
四、原生 AoT:突破运行限制
原生 AoT 让应用程序无需等待 JIT(即时)编译器在运行时编译代码,也无需部署 JIT 编译器和 IL 代码。它只部署应用程序所需的代码,使得应用程序能够在不允许使用 JIT 编译器的受限环境中运行。这就像是给应用程序插上了翅膀,让它能够在更广阔的天空中自由翱翔。
五、人工智能:开启智能应用新时代
一流的 AI 功能
.NET 8 通过.NET SDK 中一流的开箱即用 AI 功能以及与多种工具的无缝集成,让开发者能够轻松利用 AI。这就好比为开发者打开了一扇通往人工智能世界的大门,让他们能够在自己的应用程序中创造独特的人工智能体验。
库的增强与集成
为了提高与生成式 AI 工作负载的兼容性,.NET 8 为相关库带来了多项增强功能,例如集成 Tensor Primitives。同时,.NET 8 还与众多合作伙伴合作,确保开发者可以通过各自的 SDK 轻松访问各种 AI 模型、服务和平台。开源语义内核 System.Numerics SDK 更是简化了 AI 组件与新的和现有应用程序的集成,帮助开发者提供创新的用户体验。
丰富的示例和模板
现在提供了各种示例和参考模板,如客户聊天机器人、检索增强生成、使用 Azure AI 服务开发应用程序等,为开发者提供了模式和实践,让他们能够轻松入门。
六、Blazor:全栈 Web 应用的新选择
全栈 Web UI 支持
.NET 8 中的 Blazor 可以同时使用服务器和客户端来处理所有 Web UI 需求,实现了全栈 Web UI。这就像是给开发者提供了一把万能钥匙,让他们能够在同一应用程序中灵活使用 Blazor Server 和 Blazor WebAssembly,在运行时自动将用户从服务器转移到客户端。
性能优化
得益于新的基于“Jiterpreter”的运行时和新的内置组件,.NET 代码在 WebAssembly 上的运行速度显著加快。这就好比给 Web 应用程序安装了一台高性能的发动机,让它能够更加快速地响应用户的请求。
身份管理增强
作为增强.NET 8 中整体身份验证、授权和身份管理的一部分,Blazor 现在支持生成完整的基于 Blazor 的身份 UI,为应用程序的安全性提供了更强大的保障。
七、.NET MAUI:提升开发体验
单一项目系统和代码库
.NET MAUI 提供单一项目系统和单一代码库来构建 WinUI、Mac Catalyst、iOS 和 Android 应用程序。这就像是给开发者提供了一个统一的工作台,让他们能够在一个地方开发出适用于多个平台的应用程序。
平台支持与质量改进
本机 AOT(实验性)现在支持针对类似 iOS 的平台,新的 Visual Studio Code 扩展为开发跨平台.NET 移动和桌面应用程序提供了更多工具。同时,支持 Xcode 15 和 Android API 34,允许开发者瞄准最新版本的 iOS 和 Android。在性能、控件和 UI 元素以及特定于平台的行为方面也进行了大量的质量改进,例如桌面交互添加了更好的点击处理、键盘侦听器等,让应用程序的用户体验更加出色。
八、C# 12 功能:简化语法,提高效率
集合表达式
在 C# 12 之前,创建集合需要针对不同场景使用不同的语法,非常繁琐。而 C# 12 引入的集合表达式,让创建数组、跨度和其他集合类型变得更加简单、优雅。这就像是给集合创建过程提供了一个统一的模板,让开发者能够更加轻松地创建各种集合。
任何类或结构上的主构造函数
C# 12 扩展了主构造函数的适用范围,使其适用于所有类和结构,而不仅仅是记录。主构造函数允许在声明类时定义构造函数参数,减少了样板代码,提高了代码的可读性和可维护性。就像给类的创建过程添加了一个便捷的入口,让开发者能够更加高效地初始化类的字段和属性。
别名任意类型
使用 using alias 指令,现在可以为任何类型添加别名,而不仅仅是命名类型。这就像是给复杂的类型起了一个简单易记的昵称,让代码更加简洁明了。
默认 lambda 参数
从 C# 12 开始,可以在 lambda 表达式中声明默认参数,不再需要重载或空检查来处理可选参数。这就好比给 lambda 表达式添加了一个智能的默认设置,让代码更加灵活、高效。
内联数组
内联数组使开发人员能够创建固定大小的 struct 类型数组,具有类似于不安全的固定大小缓冲区的性能特征。虽然开发者可能不会直接声明自己的内联数组,但当它们从运行时 API 作为 System.Span 或 System.ReadOnlySpan 对象公开时,可以透明地使用这些数组。这就像是给数组添加了一个隐藏的加速通道,让数组的操作更加高效。
九、反射改进:更精准的类型访问
在.NET 5 中引入函数指针时,未添加对反射的相应支持。而在.NET 8 中,对函数指针使用 typeof 或反射时,将返回 System.Type 对象,该对象提供了对函数指针元数据的访问,包括调用约定、返回类型和参数。这就像是给反射功能添加了一个放大镜,让开发者能够更加精准地访问和了解函数指针的相关信息。
十、配置绑定源生成器:AOT 和剪裁友好的配置
.NET 8 引入了一个源生成器,用于在 ASP.NET Core 中提供 AOT 和适合剪裁的配置。该生成器是现有基于反射的实现的替代方法,它通过探测相关调用来检索类型信息。在项目中启用生成器后,编译器将隐式选择生成的方法,而不是预先存在的基于反射的框架实现。无需更改源代码即可使用生成器,AOT Web 应用中默认启用,其他项目类型可通过设置属性来选择使用。这就像是给配置绑定过程添加了一个智能的翻译器,让配置更加高效、安全。
十一、针对 Android 应用的 AOT 编译:减小应用大小
为了减小 Android 应用的大小,.NET 8 引入了 <AndroidStripILAfterAOT>
属性。通过设置该属性,可以进一步对 Android 应用进行 AOT 编译,减少应用大小。默认情况下,将其设置为 true 会替代默认的 AndroidEnableProfiledAot 设置,允许剪裁已 AOT 编译的(几乎)所有方法。还可以将两个属性都显式设置为 true 来结合使用分析的 AOT 和 IL 条带化,就像给 Android 应用做了一次深度的减肥手术,让应用更加轻盈。
十二、代码分析:保障代码质量
.NET 8 包括几个新的代码分析器和修复程序,可帮助验证是否正确且高效地使用.NET 库 API。这些分析器涵盖了性能、可靠性、可维护性等多个方面,例如 CA1856 - CA1867 主要关注性能问题,CA2021 关注可靠性问题,CA1510 - CA1513 关注可维护性问题。它们就像一群代码质量的守护者,时刻监控着代码的健康状况,帮助开发者写出更加优质的代码。
十三、.NET Core 库:功能增强
时间抽象
新的 TimeProvider 类和 ITimer 接口添加了时间抽象功能,让开发者可以在测试方案中模拟时间,还可以通过 Task.Delay 和 Task.WaitAsync 来模拟依赖于时间进度的 Task 操作。这就像是给时间添加了一个控制器,让开发者能够更加灵活地控制和测试与时间相关的代码。
UTF8 改进
通过实现新的 IUtf8SpanFormattable 接口,类型可以将类似字符串的表示形式直接写出到目标范围,并且与现有的 ISpanFormattable 接口密切相关。新的 Utf8.TryWrite 方法提供了基于 UTF8 的对应方法,允许使用内插字符串语法将复杂表达式直接格式化为 UTF8 字节范围。这就像是给 UTF - 8 处理添加了一个强大的加速器,让 UTF - 8 的处理更加高效、便捷。
加密
.NET 8 添加了对 SHA - 3 哈希基元的支持,在支持的环境中,可在使用 SHA - 2 的 API 中使用 SHA - 3。这就像是给加密算法添加了一把新的钥匙,为数据的安全提供了更多的保障。
基于流的 ZipFile 方法
.NET 8 包含 ZipFile.CreateFromDirectory 和 ZipFile.ExtractToDirectory 的新重载,允许通过流来创建和提取 zip 文件。这就像是给文件压缩和解压缩操作添加了一个灵活的管道,让文件的处理更加方便、高效。
综上所述,.NET 8.0 在性能、功能、开发体验等多个方面都进行了全面的升级和改进。这些新变化不仅为开发者提供了更多的工具和选择,也为构建更加高效、安全、智能的应用程序奠定了坚实的基础。让我们一起期待.NET 8.0 在未来的软件开发中发挥出更大的作用! ======================================================================
前些天发现了一个比较好玩的人工智能学习网站,通俗易懂,风趣幽默,可以了解了解AI基础知识,人工智能教程,不是一堆数学公式和算法的那种,用各种举例子来学习,读起来比较轻松,有兴趣可以看一下。
人工智能教程