前言

目前市面上流行的热更方案就是lua系列和ILRuntime,选取哪一种需要根据自己的项目进行比对。

无论是ILRuntime还是toLua都是市面上有在用到的热更方案。直观上来讲,都可以通过把代码放在StreamingAssets中,从而达到热更的目的。

本文旨在从迁移成本、运行效率两方面来进行比对两者间的差异。

迁移成本

一般Unity都是C#编写的,所以单看迁移成本,ILRuntime是完胜。

这一点不需要做太多解释。

性能比对

本文的比对主要是一些基本功能的比对,Unity版本:5.6.6 f2 。

方便阅读,不能热更的代码(写死在Unity里面的代码)同意叫做Mono代码;热更新的代码(Lua或者ILRuntime)都叫做热更代码。

(注:ILRuntime的工程都已经定义过宏 DISABLE_ILRUNTIME_DEBUG 。)

测试1、Mono代码调用热更代码:

在Lua和ILRuntime中各写一个空方法,然后在Mono中调用10000次。

可见ILRuntime耗时是toLua的10倍左右……

测试2、热更代码调用Mono:

在Lua和ILRuntime中各写一个循环,调用Mono某函数10000次。

这个更不得了了,ILRuntime比toLua慢了20倍不止。

但是有一个要提出来,就是IL的循环很有问题。这个在测试3中很明显。

测试3、热更代码的循环计算:

在Lua和ILRuntime中各写一个方法进行1万次循环计算,然后用Mono调用一次。

也就是说一次调用,在IL里面For循环10000次就是这种情况。感觉非常之奇怪,因为他的计算量并没有这么大(见测试4)。

测试4、测试3中的方法在C#中的耗时

将测试3中在Lua或者ILRuntime写的1万次循环计算的方法写成C#在Mono中调用,看他在Mono中的耗时情况。

可见这个1万次的加法计算耗时很少的,就是IL慢而已,而不是C#慢……

结论:

其实只是测了一些基本的方法,IL和Lua的很多高级的操作都没测试过。感觉这性能差得有点多啊,按理说不应该啊。官方自己的介绍(http://ourpalm.github.io/ILRuntime/public/v1/guide/index.html)说的是比Lua快了10~20倍,我咋完全没发现快在哪里……难道是我的使用方法有问题?

另外从另外一个大佬的博客《Unity中SLua、Tolua、XLua和ILRuntime效率评测》来看,虽然也出现了走循环IL巨慢的情况,但其他几个模块看起来还是核Lua系列各有千秋,不至于像我测出来的这样被Lua全方位吊打……

在多嘴一句,刚看了一个大佬写的体验(https://www.sohu.com/a/227068353_667928),也是说的For循环的问题。但是他又说:

“其中大多都是进行一个很大数量的for循环,以此来判断;但是我认为这样来评判一个框架的性能,是不准确的;因为在实际项目中。没有人会单单进行for循环,什么事情都不做的;”

哈哈哈,怕就是说的我这种人……

兼容性

Lua反正是市场早就验证过了的,肯定兼容是过关的。ILRuntime比较新,但是从现有的消息来看应该是PC、Android、IOS 都可以用的。

其他问题

以下内容来自各地道听途说,本人没有验证过,不负任何责任。

1、据说ILRuntime 如果用大量的byte之类的数据转换在android时常会出错。

2、据说ILRuntime偶发行号定位不准(打个空格就变了)。

3、目前ILRuntime的IL2CPP打包有Bug,不会执行静态构造函数。

结论

我个人而言还是很想用ILRuntime的,毕竟用C#啊……

但是这个速度……怕是还有很多的优化空间,可能需要进一步地改良。

Java和U3D比较,Unity热更方案 ILRuntime 和 toLua的比较相关推荐

  1. 一个近乎完美的Unity全平台原生c#热更方案

    今天给大家推荐一个近乎完美的Unity全平台原生c#热更方案,相对比其他方案,此方案学习成本更低.完全支持c#所有特性.兼容性极高.占用内存低.执行小高. 项目简介 HybridCLR是一个特性完整. ...

  2. 一个近乎完美的 Unity 全平台热更方案

    [公众号回复 "1024",免费领取程序员赚钱实操经验] 大家好,我是章鱼猫. 今天推荐的这个项目是「HybridCLR」,是一个特性完整.零成本.高性能.低内存的近乎完美的 Un ...

  3. unity python做热更_[专栏作家]基于ILRuntime的完整C#热更方案

    原标题:[专栏作家]基于ILRuntime的完整C#热更方案 好久不见.最近一段时间公司二次创业,实在是忙的脚打后脑勺,有段时间没来跟大家分享心得了,昨天终于有了一个初步的完结,也终于有时间和精力跟大 ...

  4. Unity3D热更设计:一款基于 HybridCLR的C#热更方案

    在这篇文章之前,可以转到我的这两篇博客:C#热更方案 HybridCLR尝鲜:Windows及Android打包.超详细的Unity3D热更新框架,附示例链接,小白也能看的懂_鹿野素材屋的博客-CSD ...

  5. JAndFix: 基于Java实现的Android实时热修复方案

    简述 JAndFix是一种基于Java实现的Android实时热修复方案,它并不需要重新启动就能生效.JAndFix是在AndFix的基础上改进实现,AndFix主要是通过jni实现对method(A ...

  6. Unity热更新之ILRuntime

    ILRuntime介绍 ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速.方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新. ...

  7. Unity热更新方案探索与讨论

    热更新必要性 App Store审核周期长 应用更新频繁 更新版本对留存数据有很大影响 Lua相关 Lua:脚本,解释性语言 LuaJit:扩展高效版本,支持编译成二进制代码. Tolua++:C/C ...

  8. Unity 热更新方案之——ILRuntime

    文章目录 前言 一.ILRuntime是什么? 二.ILRuntime使用 1.跨域委托 2.跨域继承 3.CLR绑定与重定向 前言 做游戏离不开热更新,目前市面上热更新方案用的比较多的是Lua(XL ...

  9. 现有的几个Unity热更新方案该如何选择,各自的优缺点是什么?

    1.3 huatuo示例项目源码分析与启发 上一节我们安装huatuo的开发环境,然后运行示例项目,体验了huatuo做热更新,这节课我们来分析示例项目的源码,掌握huatuo做热更新的主要的步骤,让 ...

最新文章

  1. 安装VMware ESXi 6 RC版
  2. 不用高温也能搓出一颗玻璃球?Science最新研究让低温注塑玻璃成为可能
  3. Hibernate之lazy延迟加载
  4. 数据库概述(了解数据库,当前数据库介绍,mysql数据库介绍,安装mysql数据库)
  5. java 无法找到ant_Java-Ant需要tools.jar并且无法找到我
  6. leetcode963. Minimum Area Rectangle II
  7. 除了敲代码,程序员还需要哪些必备技能?
  8. 美国商务部发布软件物料清单 (SBOM) 的最小元素(上)
  9. 定义字符串 && 字符串数组
  10. 38.伪造源站抑制的ICMP数据包
  11. 读书笔记——《灰度决策:如何处理复杂、棘手、高风险的难题》
  12. 基础SQL第无课---数据修改
  13. 人人商城二次开发 各个装修模块diypage的自定义样式
  14. 网上的打印店能打印图书吗?
  15. 数据库语法整理及WAF绕过方式
  16. 桥接模式和适配器模式的区别
  17. 杰理之AI协议之CMD_SET_BLE_VISIBILITY命令格式【篇】
  18. 计算机考研的专硕是不是越来越难,专硕考研变难了,该211改考数一英一!近期高校初试科目调整通知...
  19. wps文档漫游删除_WPS自带的文档漫游和在线模板怎么关闭?
  20. C++string中的insert()插入函数

热门文章

  1. php 将表情存入数据库,php + mysql 存入表情 【如何轉義emoji表情,讓它可以存入utf8的數據庫】...
  2. webbrowser加载地图网页出现脚本错误解决
  3. chrome下老是弹出网页显示 true
  4. ext中的EXT.XTemplate()
  5. 高教杯历年真题_喜报 | 2019“高教社”杯全国大学生数学建模竞赛获奖名单!...
  6. Java 算法 拦截导弹
  7. Pytorch DataLoader一次性封装多种数据集(pytorch Data学习六)
  8. pyechart图像示例与细节修改资料
  9. Rstudio更换主题/样式
  10. 大学计算机基础方案一,大学计算机基础案例教学与教学案例策划.doc