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



我知道Xamarin在Android中支持AOT。软件免费后,它的所有功能也都免费了。我仔细阅读了文档,并通过修改项目.csproj文件启用了AOT,如下所示:

<AotAssemblies>True</AotAssemblies>

在确保我的项目路径不包含空格(中断进程)后,我运行了一个构建,并获得了一个包含托管.NET DLL本机编译库的APK。遗憾的是,该应用程序似乎在使用.NET DLL,而完全忽略了本地库。有什么办法可以补救吗?

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

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

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

现在,如果您在代码中执行X与CPU绑定的工作量,比如在OnCreate中(您确实应该而不是执行),您将(应该)看到总时间减少。我说应该,因为AOT'ing不能保证你会看到特定代码部分的更快执行时间,它确实消除了抖动,但还涉及很多其他因素。我已经使用Mono(AOT w/&w/o LLVM)很多年了,您真的需要在您的代码上进行仪器和测试。

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

  • 缩短启动时间

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

  • 潜在的更好性能

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

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


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

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


启用LLVM

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

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

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


AotAssembly

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

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

巧合与否,当我将<AotAssemblies>True</AotAssemblies>添加到android.csproj的<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">部分时,我的启动时间从10秒减少到了4秒!然后我移除了AotAssembly并重试,我还有10秒的时间,所以AotAssemblys做了一些事情:)

最新更新