Unity 4.x 各版本IOS IL2CPP对比
不同Unity版本IL2CPP对比
| Unity版本 | C++代码总行数 | 泛型相关行数 | Attribute相关行数 | IPA大小 | 纯64位 | 64位+32位 | 备注 |
|---|---|---|---|---|---|---|---|
| 4.6.4f1 | 约3302万行 | 约2508万行(75%) | 1984行 | 330MB | 约65MB | 约130MB | 正常运行,包太大 |
| 4.6.6f1 | 约755万行 | 约156万行 (20%) | 约28万行 | 292MB | 约42MB | 约78MB | 包够小! 泛型BUG闪退,KTDCaption.AddPart |
| 4.6.7f1 | 约731万行 | 约158万行(21%) | 约28万行 | 293MB | 约43MB | 约81MB | 正常运行!包大小差一点点 |
| 4.6.8f1 | 约589万行 | 约275万(46%) | 约28万行 | 295MB | 约50MB | 约93MB | 初始化阶段,一处反射BUG闪退,KLTaskSettingCallParse里的GetType(xxx, true) |
| 4.6.9f1 | 约591万行 | 约276万行(46%) | 约28万行 | 295MB | 约50MB | 约93MB | 初始化阶段,一处反射BUG闪退,KLTaskSettingCallParse里的GetType(xxx, true) |
| 4.7.1f1 | 约591万行 | 约276万行(46%) | 约28万行 | 295MB | 约50MB | 约95MB | 初始化阶段,一处反射BUG闪退,KLTaskSettingCallParse里的GetType(xxx, true) |
注意:
- 64位+32位要小于80MB才能允许上传到App Store!
- 尚未进行代码注入!即无热更新功能
- IL2CPP的BUG集中在反射和泛型!执行文件大小跟泛型的使用成正比
- 我们的代码风格越简洁越不会出现问题!
- 最新的几个版本4.6.8-4.7.1,IL2CPP已经没有太多变化了
需要进行的优化:
- object引用类型的泛型,4.6.6后,会进行泛型共享,但是值类型的泛型,依然会生成非常大量的代码
- struct改class! 数组struct[] 会生成大量代码,数组class[]则不会
- 修复带有值类型的泛型: 如IList<(struct)> 改成IList<(class)>, Dict<(value), (value)> 改成Hashtable
以后经验:
- 禁止多重泛型、泛型类、泛型接口、泛型委托, 泛型方法用前斟酌
- 尽可能避免使用反射
不同Unity版本IL2CPP的差异
从Unity 4.6.2开始,之后的所有版本主要精力几乎都集中在IL2CPP的修复和改进。 尝试了不同Unity版本的IL2CPP,发现生成的C++代码有非常大的差异,连生成的策略都很不一样。
苹果公司对执行文件的规定
苹果公司规定,IOS应用执行文件大小有上限限制。 只支持64位的应用,执行文件必须在60MB以下。 要求iPhone 5S或以上,iOS 8.0或以上版本。 支持32位+64位的应用,执行文件必须在80MB以下,要求iOS 6.0以上。
是怎样评估泛型代码占用的?
搜索带有“Generic”字符串的C++文件,用shell命令进行统计。
IL2CPP的重灾区
数组Array

泛型 Generic
非常严重, 4.7.1的IL2CPP优化重点,就是对于对泛型进行共享优化。 比如Dictionary<(KItem), (KWeapon)>,会变成Dictionary<(* void), (* void)> 但是Dictionary<(KItem), (int)>,依然会生成C++代码。 
Unity 4.x 各版本IOS IL2CPP对比的更多相关文章
- Unity 5.6 beta版本新特性
http://manew.com/thread-98549-1-1.html 最新发布的beta版改进了编辑器和2D功能,图形性能更佳,加入新的视频播放器,并添加了对Facebook Gameroom ...
- [杂] 将高版本iTunes备份恢复到低版本iOS设备中
除非开发测试用设备,自用设备不要随便升iOS beta,不要随便升iOS beta,不要随便升iOS beta. 对于升级了高版本iOS的用户,默认情况下重刷低版本iOS时,iTunes不允许向低版本 ...
- CRM2013版本 IOS APP 说明(IPhone、IPad)
CRM2013版本 IOS APP 说明(IPhone.IPad) IPhone版本 首页 CRM APP在登录时输入账号信息,可以进行首面.其首页显示内容可以在CRM后台设置. 系统默认显示:Pho ...
- (插播)unity的 异常捕捉和 ios Android 崩溃信息的捕捉。
近期 做些准备性得工作和有意思的事情.所以近期做了一个适合ios和android 错误信息捕捉的unity插件. 两个功能,app崩溃也就是闪退 是开发人员 非常头疼的一件事,还有就是一些莫名得错误 ...
- 利用 Charles Proxy 下载旧版本 iOS App
一.软件准备 1.旧版本 iTunes1.IPSW Downloads:https://ipsw.me/2.百度网盘链接: https://pan.baidu.com/s/1PO9Z12o-rqZ_J ...
- unity的List构造函数在IOS平台存在缺陷
当迩使用一个int[]或者string[]类似的数组时,以数组来初始化List对象,有可能在IOS平台上会出现初始化对象为空,比如 , }; List<int> listTest = ne ...
- Unity3D 原来Unity比较新的版本支持中文
注意: Unity 2018.2 以上版本才可以
- unity导出工程导入到iOS原生工程中详细步骤
一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...
- Unity Android 5.6版本Resources.Load效率的问题
0x00 前言 相信不少使用Unity的小伙伴都听说过,甚至也亲身经历过在Unity5.6最初的几个版本中使用Resources.Load方法加载资源变--慢的问题. 这个问题的确是存在的,比如这个i ...
随机推荐
- TensorFlow-GPU安装配置(win10+tensorflow1.6+CUDA9.0+cudnn7.0+python3.6+Visual Studio2013)
安装步骤: TensorFlow官网 tensorflow一般只能装在python3上,CUDA9.0搭配cudnn7.0,CUDA8.0搭配cudnn6.0 查看对应要安装的环境版本(因为会不断更新 ...
- centos 7 的安全检查和ip封锁设置
查看最近登录失败的验证记录 tail -f grep "authentication failure;" /var/log/secure 发现有个ip频繁尝试登录, /sbin/i ...
- 【BZOJ 1050】1050: [HAOI2006]旅行comf (动态SPFA)
1050: [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000). ...
- 【POJ 3784】 Running Median (对顶堆)
Running Median Description For this problem, you will write a program that reads in a sequence of 32 ...
- HDU 6040 Hints of sd0061(nth_element)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6040 [题目大意] 给出一个随机数生成器,有m个询问,问第bi小的元素是啥 询问中对于bi< ...
- 【贪心+优先队列】POJ3190-Stall Reservations
[题目大意] 给出每个奶牛挤奶的时间,同一时间同一畜栏内不会有两头奶牛挤奶,问至少要多少个畜栏. [思路] 将奶牛按照挤奶开始的时间进行升序排序,再用一个小顶堆维护每一个畜栏当前的挤奶结束时间.对于当 ...
- Redis源码解析之ziplist
Ziplist是用字符串来实现的双向链表,对于容量较小的键值对,为其创建一个结构复杂的哈希表太浪费内存,所以redis 创建了ziplist来存放这些键值对,这可以减少存放节点指针的空间,因此它被用来 ...
- 【MySQL笔记】启动弹窗问题,unable to connect to remote host. catalog download has failed.
安装完MySQL之后,它每天凌晨启动一个Intaller任务,甚是烦人: 这是一个Windows的计划服务,在这里删除即可,开始/附件/系统工具/任务计划程序,把mysql的定时任务计划取消/删除 ...
- [典型漏洞分享]Insert型SQL注入的发现和利用,篡改订单金额
本例中的SQL注入和其它发现的SQL注入的主要区别:1.生成订单接口是一次性的,反复提交无效,因此,此类型的SQL注入比较难通过扫描器发现,需要人工提取和手动测试.2.Insert类型的SQL注入,不 ...
- POJ 2019 Cornfields (二维RMQ)
Cornfields Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4911 Accepted: 2392 Descri ...