Riu*_*iuo 11 c# native compilation aot xamarin
我知道Xamarin for Android支持AOT.软件免费后,它的所有功能也都免费.我阅读了文档并通过修改project.csproj文件启用了AOT ,如下所示:
<AotAssemblies>True</AotAssemblies>
Run Code Online (Sandbox Code Playgroud)
确保我的项目路径不包含空格(中断处理)后,我跑了构建和我的APK 两个托管的.NET的DLL 和本地编译库.可悲的是,该应用程序似乎使用.NET DLL并完全忽略本机库.有什么办法可以解决这个问题吗?
编辑:阅读其他一些与Mono AOT相关的问题,似乎这可能是它应该如何工作的.我想AOT编译我的应用程序,希望减少~2秒的启动时间,这在我从JIT切换到AOT之后根本没有改变.有人可以向我解释这个吗?
奖励:有什么方法可以启用高级优化标志?(自我)
Sus*_*ver 11
AOT你的程序集/代码不会改变应用程序初始化的启动(本机app bootstrap + 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/
在优化AOT代码方面,在发布版本中启用LLVM和AOT以进行性能/仪器测试.注意:测试是关键,拥有一个完整的应用程序测试套件和用于收集运行时性能的内部工具是在应用程序商店获得这些5星评价的关键;-)
EnableLLVM
一个布尔属性,用于确定在Ahead-of-Time将汇编编译为本机代码时是否使用LLVM.Xamarin.Android 5.1中添加了对此属性的支持.
默认情况下,此属性为False.
除非$(AotAssemblies)MSBuild属性为True,否则将忽略此属性.
AotAssemblies
一个布尔属性,用于确定程序集是否为Ahead-of-Time编译为本机代码并包含在.apk中.Xamarin.Android 5.1中添加了对此属性的支持.
默认情况下,此属性为False.
巧合与否,当我添加<AotAssemblies>True</AotAssemblies>到<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">android .csproj的部分时,我的启动时间从10秒减少到4秒!然后我删除了AotAssemblies并再次尝试,我再次有10秒,所以AotAssemblies做了一些事:)
| 归档时间: |
|
| 查看次数: |
10766 次 |
| 最近记录: |