Unity3D实验室之iOS真机闪退

Unity3D大项目在iOS真机测试时可能出现闪退,问题根源在于AOT编译时trampoline分配空间不足。通过增加nrgctx-trampolines, nimt-trampolines和ntrampolines的值可以解决,这些参数分别对应递归泛型、接口和泛型方法调用的trampoline空间。Trampolines是Mono运行时提高执行效率的组件,用于减少C#代码运行损耗。了解并调整这些参数能有效优化性能。" 115658771,10898707,电工电子自动控制实验设备QY-DG328B详解,"['电工实验', '电子技术', '自动控制', '教学设备']
摘要由CSDN通过智能技术生成

问题的产生

这个问题一般发生在项目比较大,OO使用良好,泛型继承用的较多的时候。第一次真机测试时,项目终于进入真机测试阶段,之前都是在Unity编辑环境下开发测试,运行的都很良好,信心满满的打包安装,结果闪退。。。,各种代码调试,跟踪都没什么线索。这怎么办?问题很可能出在了AOT的设置上。

解决方案

这个通常是因为你的程序编译的时候给 trampoline 分配的空间太小,而你的程序中又大量使用了泛型、泛型方法调用和接口实现导致的。具体的解决方法就是在 Unity3D 的编译选项 Player Setting 中有一个 AOT Compilation Options 条目,在这个选项条目中加上以下编译参数就好了
nrgctx-trampolines=8192,nimt-trampolines=8192,ntrampolines=4096
加上以后,重新打包测试,看还有没有问题

参数意思

关于上面的三个参数的意思分别如下:

  • nrgctx-trampolines=8192 这是留给递归泛型使用的空间,默认是 1024
  • nimt-trampolines=8192 这是留给接口使用的空间,默认是 128
  • ntrampolines=4096 这是留给泛型方法调用使用的空间,默认是 1024

什么是trampoline

Trampoline 是一些手写的非常短小的用来在 Mono Runtime中执行很多操作的Component Code。主要是通过 JIT 使用到的本地代码宏在运行时动态生成的。它们通常都有与之相对应的 C 方法,在某些较为复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值