不同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对比的更多相关文章

  1. Unity 5.6 beta版本新特性

    http://manew.com/thread-98549-1-1.html 最新发布的beta版改进了编辑器和2D功能,图形性能更佳,加入新的视频播放器,并添加了对Facebook Gameroom ...

  2. [杂] 将高版本iTunes备份恢复到低版本iOS设备中

    除非开发测试用设备,自用设备不要随便升iOS beta,不要随便升iOS beta,不要随便升iOS beta. 对于升级了高版本iOS的用户,默认情况下重刷低版本iOS时,iTunes不允许向低版本 ...

  3. CRM2013版本 IOS APP 说明(IPhone、IPad)

    CRM2013版本 IOS APP 说明(IPhone.IPad) IPhone版本 首页 CRM APP在登录时输入账号信息,可以进行首面.其首页显示内容可以在CRM后台设置. 系统默认显示:Pho ...

  4. (插播)unity的 异常捕捉和 ios Android 崩溃信息的捕捉。

    近期 做些准备性得工作和有意思的事情.所以近期做了一个适合ios和android 错误信息捕捉的unity插件. 两个功能,app崩溃也就是闪退 是开发人员 非常头疼的一件事,还有就是一些莫名得错误 ...

  5. 利用 Charles Proxy 下载旧版本 iOS App

    一.软件准备 1.旧版本 iTunes1.IPSW Downloads:https://ipsw.me/2.百度网盘链接: https://pan.baidu.com/s/1PO9Z12o-rqZ_J ...

  6. unity的List构造函数在IOS平台存在缺陷

    当迩使用一个int[]或者string[]类似的数组时,以数组来初始化List对象,有可能在IOS平台上会出现初始化对象为空,比如 , }; List<int> listTest = ne ...

  7. Unity3D 原来Unity比较新的版本支持中文

    注意: Unity 2018.2 以上版本才可以

  8. unity导出工程导入到iOS原生工程中详细步骤

    一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...

  9. Unity Android 5.6版本Resources.Load效率的问题

    0x00 前言 相信不少使用Unity的小伙伴都听说过,甚至也亲身经历过在Unity5.6最初的几个版本中使用Resources.Load方法加载资源变--慢的问题. 这个问题的确是存在的,比如这个i ...

随机推荐

  1. 洛谷P4609 [FJOI2016]建筑师(第一类斯特林数+组合数)

    题面 洛谷 题解 (图片来源于网络,侵删) 以最高的柱子\(n\)为分界线,我们将左边的一个柱子和它右边的省略号看作一个圆排列,右边的一个柱子和它左边的省略号看作一个圆排列,于是,除了中间的最高的柱子 ...

  2. Flask实战第68天:项目上线部署

    在开发机上的准备工作 1.确认项目没有bug 2.用pip freeze >requirements.txt将当前环境的包导出到requirements.txt文件中,方便部署的时候安装 3.将 ...

  3. 客户端 localStorage, sessionStorage, cookie 的区别

    SessionStorage, LocalStorage, Cookie这三者都可以被用来在浏览器端存储数据,而且都是字符串类型的键值对! 区别在于前两者属于WebStorage,创建它们的目的便是存 ...

  4. Codeforces 455 B. A Lot of Games

    \(>Codeforces \space 455 B. A Lot of Games<\) 题目大意 : 有两个人在玩游戏,一共玩 \(k\) 轮,每一轮的一开始有一个空串,双方每一回合需 ...

  5. SD 一轮集训 day4 弦形袋鼠

    可以发现把每一个 a[i] * b[i] 加到矩阵里去,就相当于 把一个 1*m 的向量伸缩后变成 n个再加到矩阵里去,所以答案就是远=原矩阵中线性线性无关组的个数. (而且好像一个矩阵横着消元和竖着 ...

  6. 【枚举+贪心】POJ2718-Smallest Difference

    [题目大意] 按升序输出几个不同的数字,任意组成两个数字,输出最小的差值. [思路] 虽然是在穷竭搜索的章节里找到的题目,但是我觉得不需要穷竭搜索,枚举一下就可以了,0MS.分为一下三种情况: (1) ...

  7. 修改ORACLE实例名

    修改数据库的SID  举例说明,我的数据库的SID叫testdb,现在要改成oral.更改ORACLE数据库的sid,涉及到的用东西比较多,但是大概来说就以下六步. 1.停止所有的Oracle服务.  ...

  8. MATLAB/Octave中implicit conversion from real matrix to real scalar错误原因与解决

    写程序时提示 implicit conversion from real matrix to real scalar的一个warning,主要问题在于将一个矩阵当成一个标量在使用.我的程序出现这个wa ...

  9. WebAPI 操作返回

    定义了一个返回枚举: public enum ResultExceptionEnum { 积分不足 = , 支付失败 = , 用户不存在 = , 验证码发送失败 = , 验证码不正确 = , 账号已存 ...

  10. [Bug]IE11下,forms认证,出现无法保存cookie的问题

    目录 ie11 解决方案 ie11 在ie11下,访问服务器上的网站地址,莫名其妙的多出一串东西,这一串字符串是由于客户端禁用cookie造成sessionid无法写入cookie,所以就拼在url上 ...