性能大提升!微软正式推出.NET 6

经过一年多的开发,微软正式发布.NET最新长期支持版本.NET 6,这个版本的更新重点,除了C#和F#都有许多语言功能改进之外,.NET 6终于集大成,成为跨浏览器、云计算、桌面、物联网和移动应用程序的统一平台,性能也获得大幅提升,并且更完整支持Arm64。

微软更新.NET 6的底层平台,使其能够满足所有类型的应用程序需求,让开发者可以在所有应用程序中,重复使用程序代码,因此新功能和更新,可以同时使用在所有应用程序,云计算和移动设备中执行的程序代码,都能具有相同的行为,也就是说,所有平台的应用程序,都可以使用相同的.NET函数库,并且简单地共享程序代码。

.NET 6也赋给开发人员更多的功能,这个版本添加支持机器学习和WebAssembly,开发人员可以开发具有机器学习功能的应用程序,用于像是搜索流媒体资料中的异常情况等使用案例。而WebAssembly的部分,则让开发者可以在浏览器中运行.NET应用程序,就像是HTML和JavaScript一样,或者将.NET和HTML、JavaScript程序代码混合使用。

.NET 6还有一个主打的新功能,便是.NET多平台应用程序UI(Multi-platform App UI,MAUI),开发者现在可以在单一项目中编写程序代码,并直接提供跨桌面和移动设备的客户端应用程序,实现写一次到处执行的理想,不过该项功能会比.NET 6还要晚一点发布。

微软也花了许多心力在改善.NET 6性能中,重大的改进包括PGO、文件IO和接口转换(Interface Casting)。微软提到,动态PGO(Dynamic Profile-guided Optimization)能够明显提高稳态(Steady State)性能,以TechEmpower JSON MVC组件来说,每秒钟的请求数能够从510K提高到640K,增加26%。

动态PGO创建在分层编译上,.NET 6会先以非常快速的方式,编译一次应用程序,来提高启动性能,这称为第0层编译,接着再运用大量优化重新编译应用程序,经过优化的编译称为第1层编译,微软解释,这项模型已经被证实具有提高应用程序性能的方法,该模型通过在第0层的时候,对程序代码执行进行各种观察,并将从第0层收集到的信息,用来优化第1层程序代码。

动态PGO技术会带来明显的性能差异,但是同时也增加了不少程序代码容量,不过增加的是JIT所产生的组合程序代码,而非占用较大的内存。

微软几乎全部重写.NET 6中处理文件的FileStream,重点是提高异步文件IO的性能,在Windows上实现非阻塞API,效率能够快上不少,而且微软也改进了所有平台内存的使用,当Windows和Unix实例方法不同时,也尽可能让极端情况行为一致。微软提到,所有操作系统都能获得重写FileStream所带来的性能提升,除了macOS和Linux开发者能够看到明显不同之外,原本性能远远落后的Windows,更是获得大幅改善。

另外,.NET 6在接口的检查和转换上也更快速了,性能大概提高16%到38%,这种改进对于C#的模式配对会特别有感。

微软和Arm、Apple的工程师合作,在.NET 6还扩大了对Arm64的支持,这版的主要重点是在macOS和Windows Arm64操作系统上,支持最新的Apple Silicon芯片以及x64模拟使用场景,开发者可以在macOS 11和Windows 11的Arm64操作系统上,安装Arm64和x64版本的.NET,微软建议开发者,还是使用与原生架构相符的SDK,确保最佳的性能。