微软宣称.NET 6是“迄今为止最快的.NET版本”,并且提供了长达3年的长期支持(LTS)。.NET 6更加专注于C#和F#语言,引入了C# 10和F# 6,这将使代码更加简洁、快速且优于旧版本的.NET。此版本支持Linux、Mac和Windows平台。
性能是.NET 6最显著的改进之一。.NET 6在许多功能上都进行了改进,但这里只讨论其中的三个。
在.NET 6中,System.IO.FileStream命名空间及其所有类几乎被重写,这使得这个类比之前的版本更快、更可靠。现在,文件流不会在Windows上阻塞异步I/O操作。例如,在.NET 5中,fileStream命名空间的getlength()方法需要1,932纳秒(ns)来执行,而在.NET 6中,它只需要58.52纳秒。同样的效果也可以在Mac和Linux环境中体验到。
.NET 6在JIT编译技术上进行了性能相关的改进。JIT基于Profile Guided Optimization (PGO)技术进行优化,但在.NET 6中,引入了Dynamic Profile Guided Optimization (DPGO),JIT编译器生成优化后的代码。不过,这次它是基于tier 0的更优化的代码。DPGO默认是禁用的,需要手动启用。
.NET 6引入了Crossgen 2,它有助于以更快的方式生成和优化原生代码。Crossgen 2是用C#而不是C++重写的。通过改进的Crossgen版本,可以分析和优化原生代码,从而加快应用程序的启动时间。Crossgen是一个工具,它在实际JIT工作之前提供代码的早期编译,从而减少JIT时间。Crossgen2的引入是为了克服Crossgen的局限性,后者一次只能生成一个原生代码。
.NET 6现在支持基于ARM64的处理器和操作系统,包括Mac和Windows。这意味着从现在开始,它支持X64 ARM和64位操作系统。ARM是一种不同的CPU架构,类似于Windows的X86(32位)和X64(64位),但这种架构是为移动和智能设备开发的。ARM64是ARM架构的下一个版本,支持64位处理。
这个功能对开发者非常有用。他们可以修改并立即将这些更改应用到正在运行的应用程序中。它有助于加快开发过程,基本上这个功能有助于减少编辑次数和应用程序编译之间的时间。所有类型的应用程序开发都支持这个功能,如Web、桌面、移动开发、云和其他项目类型。但请注意,这个功能不支持Xamarin表单和使用F#构建的应用程序。
MAUI也被称为.NET多平台应用程序用户界面。这个特性刚刚被引入,目前处于预览阶段。有了这个特性,开发者可以使用单一的代码库来开发桌面和移动应用程序。.NET MAUI使用原生容器和控件用于Blazor混合场景。
随着.NET 6的发布,C# 10及其相关特性也被包括在内。在这些.NET特性中,C#进行了修改和升级,以使用一些新的语言特性,如同步主方法、目标类型化的新表达式、文件范围命名空间、可为空的引用类型等。需要注意的是,升级到.NET 6后,现有的C#代码或功能不会受到影响。
在C#中可以发现以下新的改进:
HTTP/3是HTTP的新版本。在这个新版本中,HTTP使用QUIC协议,该协议用作底层连接协议。这个协议有助于更快地建立连接,并且独立于IP地址。它还允许移动和智能设备在WIFI和其他无线网络之间漫游。在此之前的版本中,HTTP使用的是HTTP/1.1和HTTP/2。HTTP/3即使在网络数据包数量很少的情况下也改善了连接请求。
JSON API进行了许多改进,其中一些如下:
.NET 6在安全性方面也进行了一些改进:它现在提供了控制流执行技术(Control-flow Enforcement Technology)和写入独占执行(W^X)。
这个功能已经在.NET 5中引入,它有助于修剪未使用的程序集,但在.NET 6中,功能升级到了未使用的类型和成员。展望未来,未使用的类型和成员也将被修剪。
Application.SetDefaultFont(Font)是.NET 6引入的新方法,正如其名称所示,它将默认字体设置为Win表单。此外,C# Windows表单已经更新,以支持使用指令、文件范围命名空间和可为空的引用。
.NET 6引入了新的目标框架。现在可以看到net 6.0-android、net 6.0-ios和net 6.0-macos作为目标框架。
.NET 6发布了新的与LINQ相关的API,如:
.NET 6的兼容性和支持的版本如下:
如果应用程序是基于旧版.NET框架构建的,那么将其迁移到6.x将需要更多的努力。
希望本文能让了解.NET 6的新特性。在下一篇文章中,将更多地了解C# 10。
建议和查询总是受欢迎的。