Lua,ILRuntime, HybridCLR(wolong)/huatuo热更新对比分析

前言

这两年,各种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这种技术原理的热更方案。

本节分享就到这里,进入主页学习小组,可以学习视频教程,框架设计相关知识。

猜你喜欢

转载自blog.csdn.net/voidinit/article/details/126048169