今天要写的这篇文章源自昨天在朋友圈发的文章《UWP 通过 .NET 9 和Native AOT 的支持实现 UWP 应用的现代化》[1],一位小伙伴的对话让我想全面梳理下Native AOT的现在的进展。

.NET 9 的 Native AOT(Ahead-of-Time Compilation)是微软在.NET 9版本中重点发展的一项技术,旨在提升应用程序的性能。Native AOT 技术可以将.NET 代码预先编译为本地代码,从而实现更快的启动时间和更高的执行效率。

在.NET 9中,微软已经将Native AOT作为提升性能的关键点之一[2]。此外,微软还宣布了对通用Windows平台(UWP)的初步支持,允许开发者使用.NET 9和Native AOT技术来现代化改造现有的UWP应用。这一举措为UWP开发者提供了一条升级路径,使他们能够利用最新的.NET和Native AOT技术来改进其应用程序。 .NET 9的Native AOT不仅限于UWP平台,它还支持老旧的Windows 7和XP环境,这标志着AOT技术在兼容性方面的突破。然而,对于Android平台的Native AOT支持,目前尚未完成,尤其是JNI(Java Native Interface)支持,这被认为是一个较大的功能需求,还有WPF/Winform 的Native AOT支持也需要在.NET 10 才能够完成。

.NET 的Native AOT技术通过在编译阶段对代码进行优化,使得生成的可执行文件更小且启动速度更快。这一突破性功能不仅实现了对老旧Windows 7和Windows XP环境的支持,还为性能要求高且依赖旧版系统的开发者提供了新的可能性。具体来说,.NET 9版本中,为了确保向下兼容性,X86架构下的AOT(Ahead-of-Time)编译器的支持扩展,.NET 9采用了精心设计的编译策略,确保了对Win7及XP API的兼容性,使代码能够无缝运行,允许开发人员将应用程序在编译阶段就优化为能够在老旧的Windows系统上运行。LoongArch架构和Risc-V架构下的AOT 编译器支持,社区也在继续完善之中。

在.NET 9中,对Native AOT(按需编译)支持和JNI(Java Native Interface)的支持有以下具体进展:

  • 在.NET 9中,引入了两个新的属性,允许开发者设计功能开关。这些功能开关可以在.NET库(以及你自己)中使用来切换某些功能区域。如果一个功能不被支持,在裁剪或使用Native AOT进行编译时,将移除那些不受支持且不必要的功能,从而减小应用程序的大小。
  • 在.NET MAUI的测试中,通过调用JNI来获取Java数组元素的性能比使用string.Split和新的Span方法更差。这表明开发者正在考虑如何在未来版本中优化这一过程。
  • .NET 9在Android平台上对Native AOT的支持主要体现在通过新属性实现的功能开关,以及通过Native AOT减少应用大小的能力。

对于开发者而言,学习和采用.NET 9的Native AOT技术需要具备以下前置知识或技能:

  1. 对.NET平台的理解:首先,开发者需要对.NET平台有基本的了解,包括其架构、运行时环境以及如何在不同平台上部署应用。这有助于理解Native AOT技术如何与现有.NET生态系统集成。

  2. 熟悉C#或F#编程语言:由于.NET 9支持通过C#或F#进行开发,因此掌握这些编程语言是必要的。此外,了解这些语言的高级特性将有助于更有效地利用Native AOT带来的性能优势。

  3. 了解编译器原理:Native AOT(Native Application Optimized Translation)是一种预编译技术,它允许开发者直接生成机器码而不是依赖JIT(即时编译)。因此,对编译器的工作原理有一定的了解可以帮助开发者更好地理解和使用Native AOT技术[3]。

  4. 性能优化经验:由于Native AOT旨在提供可预测的性能并减少资源消耗,因此具备一定的性能优化经验是有益的。这包括对内存管理、代码优化等方面的深入了解。

  5. 云原生和微服务架构知识:虽然不是必须的,但了解云原生应用和微服务架构的相关知识可以增强开发者在使用.NET 9时构建高效、可扩展的应用的能力。这是因为.NET 9特别强调了在这些架构中的性能表现,参见.NET 9 RC1发布[4]。

相关链接:

.NET 的 Native AOT 现在是什么样的?的更多相关文章

  1. CPF 使用C#的Native AOT 发布程序

    微软已经将AOT的包移到Nuget了,之前是在实验测试服务器上的.并且由之前的alpha版本改成了preview版本. C#的开发效率,接近C++的运行效率,而且可以防止反编译,可以支持大部分反射功能 ...

  2. .Net 7 的AOT的程序比托管代码更容易破解?

    楔子 .Net 7的一个重要功能是把托管的源码编译成Native Code,也就是二进制文件.此举看似增加了程序反编译难度,实际上是减少了程序的破解难度.本篇在不触及整个程序架构的前提下,以简单的例子 ...

  3. .NET 5 中的隐藏特性

    前言 双十一当天 .NET 5 正式发布带来了很多的新特性和改进,个人觉得非常香,并且花了 10 分钟时间就把自己的 4 个 .NET Core 3.1 的项目升级到了 .NET 5,堪称无痛. 但是 ...

  4. 官宣.NET 6 预览版4

    我们很高兴发布 .NET 6 Preview 4.我们现在大约完成了 .NET 6 发布的一半.现在是一个很好的时机,可以再次查看.NET6的完整范围.许多功能都接近最终形式,而其他功能将很快推出,因 ...

  5. [.NET大牛之路 005] .NET 的执行模型

    .NET大牛之路 • 王亮@精致码农 • 2021.07.06 前面我们介绍 .NET 历史时讲过,微软基于 .NET Framework 重新设计并创造了跨平台的 .NET Core,目前已经发展到 ...

  6. [.NET大牛之路 007] 详解 .NET 程序集

    .NET大牛之路 • 王亮@精致码农 • 2021.07.13 上一篇我们介绍了 Roslyn 编译器,我们知道,我们编写的 C#/VB 代码经过 Roslyn 编译器编译后会生成程序集文件.按照之前 ...

  7. .NET Core资料精选:架构篇

    .NET 6.0 马上就要发布,高性能云原生开发框架.希望有更多的小伙伴加入大.NET阵营.这是本系列的第三篇文章:架构篇,喜欢的园友速度学起来啊. 本系列文章,主要分享一些.NET Core比较优秀 ...

  8. .NET 7 预览版2 的亮点之 NativeAOT 正式合并入 .NET 主线

    .NET 中备受追捧和期待已久的功能NativeAOT终于出现在本周的.NET 7 预览版2中,该项目的工作仍在继续,该版本将 NativeAOT 从实验性的 dotnet/runtimelab re ...

  9. .NET 6 史上最全攻略

    欢迎使用.NET 6.今天的版本是.NET 团队和社区一年多努力的结果.C# 10 和F# 6 提供了语言改进,使您的代码更简单.更好.性能大幅提升,我们已经看到微软降低了托管云服务的成本..NET ...

  10. .NET 7 Preview 3添加了这些增强功能

    .NET 7 Preview 3 已发布, .NET 7 的第三个预览版包括对可观察性.启动时间.代码生成.GC Region.Native AOT 编译等方面的增强. 有兴趣的用户可以下载适用于 W ...

随机推荐

  1. SwiftUI学习01-基本使用

    SwiftUI 是苹果推出的一种现代化方式,用于创建跨所有 Apple 平台的用户界面.它通过声明性语法简化了 UI 的开发流程.下面是一个基本的 SwiftUI 示例,展示了如何使用 SwiftUI ...

  2. SQL SERVER根据数据表的某个栏位查询另一个数据表符合条件的某个栏位的值,如果多行则合并为一张字符串形式

    SQL SERVER根据数据表的某个栏位查询另一个数据表符合条件的某个栏位的值,如果多行则合并为一张字符串形式 要在 SQL Server 中根据一个数据表的某个列查询另一个数据表符合条件的某个列的值 ...

  3. 变频器通过Modbus转Profinet网关接电机与PLC通讯在自动化的应用

    巴图自动化Profinet转Modbus模块(BT-MDPN10)是一种用于不同通讯协议之间互连的设备,它可以将Profinet与Modbus这两种不同的通讯协议进行转换,从而实现设备之间的通讯和数据 ...

  4. 题解:AT_abc359_e [ABC359E] Water Tank

    背景 中考结束了,但是暑假只有一天,这就是我现在能在机房里面写题解的原因-- 分析 这道题就是个单调栈. 题目上问你第一滴水流到每个位置的时间.我们考虑,答案其实就是比当前木板高且距离当前木板最近的那 ...

  5. Git的存储原理

    目录 Git 设计原理 Git vs SVN Git 存储模型 .git 目录结构 Git 基本数据对象 Git 包文件 Git 引用 Git 设计原理 概括的讲,Git 就是一个基于快照的内容寻址文 ...

  6. 【Java-GUI】01 AWT & 布局

    https://www.bilibili.com/video/BV1Z54y1S7ns --1.AWT 完整描述:Abstract Window Toolkit 抽象窗口工具集 提供的API资源 抽象 ...

  7. 【C】Re06 数组与指针

    一.指针和数组 void pointerAndArray() { int array[5] = {1, 2, 3, 4, 5}; printf("pointer array -> %p ...

  8. 【Vue】Re21 VueX 第二部分(Mutations)

    一.Mutations携带参数处理 Store状态的更新唯一方式:提交Mutations Mutations包含两部分: 1.字符串的事件类型[TYPE] 2.一个回调函数[HANDLER] 该函数的 ...

  9. NVIDIA显卡如何进一步压榨性能 —— 开启单用户独享模式

    开启单用户独享模式可以提高显卡利用率,但是最大的缺点就是开启后显卡中只能有一个用户的程序,其他用户的程序只能等待显卡中原有程序全部退出才可以使用显卡,因此该种模式只适合于个人电脑,不适合于服务器(没有 ...

  10. tf.metrics 使用过程中发现的一些问题

    起因是看到了这么一个帖子: http://www.cocoachina.com/cms/wap.php?action=article&id=86347 简短来说就是下面的代码   运行起来结果 ...