.NET 8 中的原生 AOT 编译
原生 AOT(预先编译)是一项功能,允许开发者创建编译为原生代码的独立应用,该应用可在未安装 .NET 运行时的计算机上运行。此功能可带来诸多优势,例如最大限度地减少磁盘占用、减小可执行文件大小、缩短启动时间以及降低内存需求。
本机 AOT 编译并不是 .NET 8 中的新功能。它是在 .NET 7 中首次引入的。
.NET 7 和 .NET 8 的 AOT 编译之间的区别是:
• System.Text.Json 改进:.NET 8 增加了对更多类型、源生成、接口层次结构、命名策略、只读属性等的支持。
• 性能新类型:.NET 8 引入了 FrozenDictionary、FrozenSet、SearchValues、CompositeFormat、TimeProvider 和 ITimer 等新类型,以提高应用程序性能。
• System.Numerics 和 System.Runtime.Intrinsics 增强功能:.NET 8 增加了对 Vector512、AVX-512、IUtf8SpanFormattable、Lerp 等的支持。
• System.ComponentModel.DataAnnotations 添加:.NET 8 为云原生服务添加了新的数据验证属性和新的 ValidateOptionsResultBuilder 类型。
• 托管服务生命周期方法:.NET 8 为托管服务添加了新的方法,例如 StartAsync、StopAsync、StartBackgroundAsync 和 StopBackgroundAsync。
需要注意的是,ASP.NET Core 中并非所有功能目前都兼容原生 AOT。更多信息,请参阅原生 AOT 部署概述。
如何在 .NET 8 中使用原生 AOT 编译
您可以<PublishAot>true</PublishAot>在项目 .csproj 文件中添加以启用本机 AOT 编译。
对于新项目,您可以使用–aot参数创建它们。例如:dotnet new console –aot。
默认情况下,编译器会选择混合方法代码优化,但你可以在 .csproj 文件中指定优化偏好。你可以选择尺寸或者速度根据您的要求。
<OptimizationPreference>Size</OptimizationPreference>
或者
<OptimizationPreference>Speed</OptimizationPreference>
结果
创建了一个简单的控制台应用程序来测试原生 AOT 编译。我使用了一个简单的控制台应用程序,该应用程序向控制台写入了 100 次“Hello World!”。我使用不同的优化偏好设置测试了该应用程序。我得到了以下结果:
尺寸 速度
.NET 8
(独立、单文件) 65938 千字节 00.0051806 ~5毫秒
.NET 7 AOT(默认) 4452 千字节 00.0029823 ~2毫秒
.NET 8 AOT(默认) 1242 千字节 00.0028638 ~2毫秒
AOT(速度) 1280 千字节 00.0023838 ~2毫秒
AOT(尺寸) 1111 千字节 00.0025145 ~2毫秒
由于大多数现有库尚不支持 AOT 编译,因此我无法使用三方库,如:BenchmarkDotnet来测量性能。我使用了Stopwatch来测量性能。因此,性能结果可能不准确,但可以深入了解性能差异。
MAUI 中的 AOT 支持
现在,您可以在 .NET MAUI 中对类似 iOS 的目标框架使用原生 AOT 编译。您可以通过将以下内容添加<PublishAot>true</PublishAot>到项目 .csproj 文件,以完全相同的方式启用 AOT 编译。据 dotnet 团队称,使用 AOT 编译后,应用程序大小减少了 35%,启动时间减少了 28%,运行时性能也提升了 50%。
但是 MAUI AOT 编译存在一些限制。许多库仍然不支持 AOT 编译,并且某些平台特定的功能目前可能无法使用。
何时使用本机 AOT 编译?
当您需要优化 .NET 应用程序的速度和大小时,原生 AOT 编译非常有用。它对于需要快速启动时间和高效运行时性能的应用程序(例如移动应用或高性能计算应用程序)尤其有用。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » .NET 8 中的原生 AOT 编译