当前位置:网站首页>Lua,ILRuntime, HybridCLR(wolong)/huatuo热更新对比分析
Lua,ILRuntime, HybridCLR(wolong)/huatuo热更新对比分析
2022-07-31 04:42:00 【Clank的游戏栈】
前言
这两年,各种Unity热更新方案如雨后春笋般出来了,今天来写篇文章来对比一下Unity各大热更新方案的优缺点。目前主流的Unity热更新的方案有:


接下来我们从几个点来分析比对这几个热更新的方案:
(1) 可热更的代码的范围;
(2) 发布新版本的时,新版本的性能与老版本热更;
(3) 热更解释执行效率的对比分析;
(4) 哪种方案更符合开发者的开发习惯;
可热更的代码的范围对比
Lua,方案都是项目种内置Lua虚拟机,它能热更的范围是使用Lua开发的所有脚本都可以热更,C#开发的代码可以通过提前的hotfix来做热更补丁。虽然Lua方案看上去Lua代码和C#代码都可以热更,但是其实hotfix来做c#代码热更的时候,需要打标记,你无法预判哪些需要C#可能会被更新,同时hotfix经过几个版本迭代,以前版本有热补丁,新版本没有热补丁,管理起来非常的麻烦。

这一局, HybridCLR(wolong) huatuo完胜。可以更新任意C#实现的代码,如果要热更新,就把这个c#代码所在的.dll字节码库装载到il2cpp vm 就可以解释执行,如果不加载.dll的字节码,就使用原来的 il2cpp的native代码。
新版本的性能与老版本热更
这一局也是HybridCLR(wolong) huatuo完胜,当有新版本发送的时候,比如1.0, 我们开发了一些热更代码,到2.0, 发布2.0的时候,1.0的是热更了服务器上的代码解释执行, 2.0是直接代码就可以了,但是Lua/purets/ILRuntime 2.0版本都是解释执行,而HybridCLR(wolong) huatuo, 1.0是加载更新的.dll 到il2cpp vm虚拟机,解释执行IL字节码。但是当我们发布2.0的时候,就不用加载.dll, 那么直接使用2.0 il2cpp转好的native代码直接可以被机器执行,所以其它方案都是解释执行,而HybridCLR(wolong) huatuo新版本是native 代码。总结一下Lua/ILRuntime/puerts热更方案,新版本都是解释执行热更代码,而HybridCLR(wolong) huatuo使用native代码直接运行,新版本native性能,比解释执行性能要好。
热更解释执行效率的对比分析
上面分析了,新版本的时候,Lua/ILRuntime/puerts仍然是解释执行,而HybridCLR(wolong) huatuo是native code,接下来分析一下都是热更解释执行效率与性能的对比,Lua/ILRuntime/puerts是在C#层内置虚拟机,所以热更代码的内存,都是运行在虚拟机域的内存对象,如果要访问native c#的对象,都要用函数包起来来访问,而HybridCLR(wolong) huatuo在解释执行IL字节码的时候,先把字节码的对象内存,映射成native内存块,所以热更解释执行IL字节码的同时,能直接访问 native内存对象。这样就不用像其它热更一下用函数包起来,性能达到最好。数据对象的内存访问已经讨论了,接下来在看解释执行,都是解释二进制字节码,这些解释执行的效率基本都在一个数量级上,由于HybridCLR(wolong) huatuo可以直接访问native 内存对象,所以热更部分的执行性能上HybridCLR(wolong) huatuo要优于其它方案。
哪种方案更符合开发者的开发习惯
这局又是HybridCLR(wolong) huatuo完胜,使用HybridCLR(wolong) huatuo热更方案的时候,你不用管哪些要热更,哪些不用热更新,只要按照模块利用Unity 的ADF机制来生成不同的项目,并生成对应的.dll, 底层打包的时候,都统一用il2cpp转成native code, 如果新版本哪个.dll 要更新了,只要把生成的新版本的.dll放服务器上,那么就从服务器装载进来到il2cpp vm中,这样就可以解释执行。所以HybridCLR(wolong) huatuo 和普通的Unity开发几乎一样。

通过几个对比,以HybridCLR(wolong) huatuo为代表的基于il2cpp vm的热更方案,将会是Unity热更方案的主流首选。如果不出意外,未来的热更的趋势就是HybridCLR(wolong) huatuo这种技术原理的热更方案。
本节分享就到这里,进入主页学习小组,可以学习视频教程,框架设计相关知识。
边栏推荐
- 专访 | 阿里巴巴首席技术官程立:云+开源共同形成数字世界的可信基础
- [Paper reading] Mastering the game of Go with deep neural networks and tree search
- 聚变云原生,赋能新里程 | 2022开放原子全球开源峰会云原生分论坛圆满召开
- C Implementation of Simple Network File Copy
- MySQL数据库备份
- [C language] General method of base conversion
- STM32HAL库修改Hal_Delay为us级延时
- (5) final, abstract class, interface, inner class
- mysql基础知识(二)
- WPF WPF 】 【 the depth resolution of the template
猜你喜欢

数字经济时代的开源数据库创新 | 2022开放原子全球开源峰会数据库分论坛圆满召开

Port inspection steps - 7680 port analysis - Dosvc service

Unity打灵狐者

Open Source Database Innovation in the Digital Economy Era | 2022 Open Atom Global Open Source Summit Database Sub-Forum Successfully Held
![[C language] General method of base conversion](/img/28/954af5f47a79ff02d3cc0792ac8586.jpg)
[C language] General method of base conversion

prompt.ml/15中<svg>标签使用解释

聚变云原生,赋能新里程 | 2022开放原子全球开源峰会云原生分论坛圆满召开

ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)

开放原子开源基金会秘书长孙文龙 | 凝心聚力,共拓开源

【C语言进阶】文件操作(一)
随机推荐
VScode+ESP32 quickly install ESP-IDF plugin
C language confession code?
(六)枚举、注解
【小土堆补充】Pytorch学习笔记_Anaconda虚拟环境使用
visual studio 那些提高效率的快捷键,总结(不时更新)
C语言从入门到如土——数据的存储
The use of beforeDestroy and destroyed
Postgresql 15 source code analysis (5) - pg_control
Industry landing presents new progress | 2022 OpenAtom Global Open Source Summit OpenAtom OpenHarmony sub-forum was successfully held
两个地址池r2负责管地址池r1负责管dhcp中继
聚变云原生,赋能新里程 | 2022开放原子全球开源峰会云原生分论坛圆满召开
已解决:不小心卸载pip后(手动安装pip的两种方式)
Basic knowledge of mysql (2)
"A daily practice, happy water problem" 1331. Array serial number conversion
Bubble sort, selection sort, insertion sort, binary search directly
Hand in hand to realize the picture preview plug-in (3)
SOLVED: After accidentally uninstalling pip (two ways to manually install pip)
【线性神经网络】softmax回归
Open Source Database Innovation in the Digital Economy Era | 2022 Open Atom Global Open Source Summit Database Sub-Forum Successfully Held
Recursive implementation of the Tower of Hanoi problem