当前位置: 首页 > article >正文

创建.net core 8.0项目时,有个启用原生AOT发布是什么意思

启用原生 AOT 发布(Native AOT publishing) 是指在 .NET 6 及更高版本中使用 Ahead-of-Time (AOT) 编译 技术,将应用程序提前编译为本地机器代码,从而生成更高效、更快速启动的可执行文件。

1. AOT 编译是什么?

AOT (Ahead-of-Time) 编译 是一种将源代码或中间代码(如 C# 编译成 MSIL - Microsoft Intermediate Language)提前编译成机器代码的技术。这与 JIT (Just-In-Time) 编译 相对,后者是在程序运行时动态将中间语言代码编译成机器代码。

在传统的 .NET Core 或 .NET 5/6 之前,程序一般采用 JIT 编译方式,程序在启动时会先加载并解析中间语言(IL),然后根据需要将 IL 转换为机器代码。

AOT 编译则是将整个应用程序在构建时就预先编译成平台特定的机器代码。最终生成的是一个独立的本地可执行文件(如 .exe.out 等),而不需要在运行时再进行 JIT 编译。

2. 原生 AOT 发布的优点

  • 更快的启动速度:由于代码已经提前编译成了本地机器代码,应用程序可以直接运行,而无需在启动时加载并编译 IL 代码。这意味着应用程序的启动时间可以显著减少。

  • 较小的内存占用:由于不需要 JIT 编译器,程序运行时的内存开销会相对减少。

  • 更小的运行时依赖:与使用 JIT 的方式不同,原生 AOT 编译的应用程序不依赖于 .NET 运行时或其他运行时环境,它将这些依赖项静态地包含在生成的可执行文件中,简化了部署。

  • 更高的性能:应用程序已经是本地代码,执行时无需经过 JIT 编译过程,减少了运行时开销。

  • 更适合云端或容器环境:在资源有限的环境下(例如微服务架构、容器等),原生 AOT 可以减少资源消耗,提高效率。

3. 原生 AOT 发布的缺点

  • 启动时性能优化缺失:在原生 AOT 中,所有的代码必须在构建时完全编译,而不再有 JIT 编译器优化的机会。因此,对于某些复杂的代码路径,JIT 编译的动态优化可能会比 AOT 编译表现更好。

  • 支持的功能有限:虽然 AOT 编译提供了更好的性能,但它的支持的功能范围相对较小,某些动态功能(例如反射、动态生成代码等)在 AOT 编译下可能无法正常工作或需要额外的配置。

  • 编译时间较长:由于所有的代码都必须在编译时进行预编译,构建时间可能会比常规的 JIT 编译长。

4. 如何启用原生 AOT 发布

在 .NET 6 或更高版本中,启用原生 AOT 发布通常需要进行以下步骤:

  1. 在项目文件中启用 AOT: 在 .csproj 文件中,你需要添加 AOT 编译的设置。例如,使用如下的配置来启用 AOT:

    <PropertyGroup> <PublishAot>true</PublishAot> </PropertyGroup>
  2. 选择正确的发布目标: 你需要选择一个适合的发布目标,比如 Windows、Linux 或 macOS。如果是发布为本地可执行文件,则需要选择与目标操作系统兼容的目标架构(如 x64 或 ARM)。

  3. 使用命令发布应用: 在启用了 AOT 后,可以使用 dotnet publish 命令发布应用程序,像这样:

    dotnet publish -c Release -r win-x64 --self-contained

    其中 -r 指定目标运行时,--self-contained 表示发布为自包含的应用,即不依赖外部的 .NET 运行时。

  4. 运行时指定: AOT 编译通常需要通过配置来明确指定目标运行时。通过 .NET SDK 或命令行工具,你可以选择不同的运行时目标。

5. 原生 AOT 与其他 .NET 编译模式的对比

  • .NET Core / .NET 5/6 的 JIT 编译:使用 JIT 编译时,应用程序会先编译为中间语言(IL),然后在运行时根据需要进行 JIT 编译。虽然启动速度较慢,但可以在运行时动态优化代码。

  • .NET Native:在 .NET Core 之前的 UWP(通用 Windows 平台)应用中,.NET Native 是一种类似 AOT 的编译方式,应用程序直接编译为本地机器代码,适用于 UWP 目标,但不适用于桌面应用。

  • 原生 AOT(Native AOT):这是 .NET 6 引入的新技术,与之前的发布模式相比,它更加优化了启动速度和内存占用,并且可以生成一个自包含的、无依赖的本地可执行文件。

6. 总结

启用原生 AOT 发布是通过提前编译将应用程序代码转换为平台特定的机器代码,来提升启动速度、内存占用和执行性能的技术。它适合于对启动性能要求高的应用,尤其是在容器化、微服务等环境中,可以大幅减少资源开销。然而,它也有一些限制,特别是在动态功能和编译时间方面,因此需要根据具体需求来选择是否启用 AOT 发布。


http://www.kler.cn/a/468014.html

相关文章:

  • VSCode编辑+GCC for ARM交叉编译工具链+CMake构建+OpenOCD调试(基于STM32的标准库/HAL库)
  • 学英语学压测:02jmeter组件-测试计划和线程组ramp-up参数的作用
  • 初学vue3心得
  • 【python因果库实战15】因果生存分析4
  • umd格式
  • 让css设置的更具有合理性
  • Oracle 创建本地用户,授予权限,创建表并插入数据
  • SQL中,# 和 $ 用于不同的占位符语法
  • 在 Python 中合并多个 Word 文档
  • spring防止重复点击,两种注解实现(AOP)
  • [开源]C++代码分享
  • 基于Spring Boot微信小程序的房产交易租赁服务平台
  • 慧集通iPaaS集成平台低代码训练-实践篇
  • 术业有专攻,遨游工业三防手机筑牢“危急特”通信防线
  • Ubuntu离线登入mysql报错缺少libncurses.so.5问题
  • CSS 之 响应式设计 前世今生
  • Java 集合框架之 List、Set 和 Map 的比较与使用
  • ABAP弹出对对话框错误信息设计
  • 在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)
  • C#中鼠标点击获取Chart图形上的坐标值
  • Nginx整理
  • TP8 前后端跨域访问请求API接口解决办法
  • 数据结构考前总结
  • 【光纤通信】光纤结构
  • protobuf: 通讯录2.2
  • Git关联多个仓库