繁体   English   中英

在 Xamarin for Android (Visual Studio) 中启用 AOT

[英]Enable AOT in Xamarin for Android (Visual Studio)

我知道 Xamarin for Android 支持 AOT。 该软件免费后,其所有功能也都免费。 我阅读了文档并通过修改我的project.csproj文件启用了 AOT,如下所示:

<AotAssemblies>True</AotAssemblies>

确保我的项目路径不包含空格(中断处理)后,我跑了构建和我与两个托管的.NET的DLL本地编译库的APK。 可悲的是,该应用程序似乎正在使用 .NET DLL 并完全忽略本机库。 有什么办法可以解决这个问题吗?

编辑:阅读其他一些与 Mono AOT 相关的问题,似乎这可能是它应该如何工作的。 我想对我的应用程序进行 AOT 编译,希望能减少大约 2 秒的启动时间,在我从 JIT 切换到 AOT 后,它根本没有改变。 有人可以向我解释这个吗?

奖励:有什么方法可以启用高级优化标志? (例如 -o)

AOT 程序集/代码不会改变应用程序初始化的启动(本机应用程序引导程序 + Xamarin/Mono 初始化,但不包括任何代码执行时间)。

现在,如果您在代码中执行X量的 CPU 绑定工作,例如在OnCreate (您确实应该这样做),您将(应该)看到总时间减少。 我说应该是因为 AOT'ing 并不能保证您会看到特定代码部分的执行时间更快,它确实消除了抖动,但还涉及许多其他因素。 我一直在使用单声道(AOT W /&W / O LLVM)很多年了,你真的需要在你的代码的仪器和测试。

尽管 JIT 模式非常快,并且 Mono 中的默认优化已经过调整以在优化和 JIT 速度之间提供良好的平衡,但 AOT 编译提供了一些额外的好处:

  • 减少启动时间。

注意:这对于可能需要在运行前执行大量代码的大型程序特别有用......

  • 潜在的更好的性能。

注意:....这意味着某些程序可能运行得更慢,因为生成的代码比 JIT 可以生成的特定代码更通用。

参考: http : //www.mono-project.com/docs/advanced/aot/


启用 LLVM 和 AOT 以测试您的发布版本:

在 AOT 代码的优化方面,在您的发布版本中启用 LLVM 和 AOT,以进行性能/仪器测试。 注意:测试是关键,拥有完整的应用测试套件和用于收集运行时性能的内部工具是在应用商店获得 5 星评价的关键;-)


启用LLVM

一个布尔属性,用于确定在提前将程序集编译为本机代码时是否使用 LLVM。 Xamarin.Android 5.1 中添加了对此属性的支持。

默认情况下,此属性为 False。

除非 $(AotAssemblies) MSBuild 属性为 True,否则将忽略此属性。


装配体

一个布尔属性,用于确定程序集是否会被提前编译为本机代码并包含在 .apk 中。 Xamarin.Android 5.1 中添加了对此属性的支持。

默认情况下,此属性为 False。

无论是否巧合,当我将<AotAssemblies>True</AotAssemblies><PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">部分的 android .csproj 时,我的启动时间从 10 秒减少到 4 秒! 然后我删除了 AotAssemblies 并再次尝试,我又有 10 秒的时间,所以 AotAssemblies 做了一些事情:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM