unityloverz 发表于 2022-9-26 13:53

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

今天给大家推荐一个近乎完美的Unity全平台原生c#热更方案,相对比其他方案,此方案学习成本更低、完全支持c#所有特性、兼容性极高、占用内存低、执行小高。
项目简介
HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案。
HybridCLR扩充了il2cpp的代码,使它由纯AOT runtime变成‘AOT+Interpreter’ 混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不仅能在Android平台,也能在IOS、Consoles等限制了JIT的平台上高效地以AOT+interpreter混合模式执行。从底层彻底支持了热更新。
项目特点

[*]特性完整。近乎完整实现了ECMA-335规范,除了 下文中"限制和注意事项" 之外的特性都支持。
[*]零学习和使用成本。HybridCLR将纯AOT runtime增强为完整的runtime,使得热更新代码与AOT代码无缝工作。脚本类与AOT类在同一个运行时内,可以随意写继承、反射、多线程(volatile、ThreadStatic、Task、async)之类的代码。不需要额外写任何特殊代码、没有代码生成,也没有什么特殊限制。
[*]执行高效。实现了一个极其高效的寄存器解释器,所有指标都大幅优于其他热更新方案。性能测试报告
[*]内存高效。热更新脚本中定义的类跟普通c#类占用一样的内存空间,远优于其他热更新方案。内存占用报告
[*]原生支持hotfix修复AOT部分代码。几乎不增加任何开发和运行开销。
[*]兼容性:支持所有il2cpp支持的平台。
[*]稳定性:目前已经接入上百个大中小商业游戏项目。
工作原理

HybridCLR从mono的hybrid mode execution技术中得到启发,为unity的il2cpp之类的AOT runtime额外提供了interpreter模块,将它们由纯AOT运行时改造为"AOT + Interpreter"混合运行方式。



更具体地说,HybridCLR做了以下几点工作:

[*]实现了一个高效的元数据(dll)解析库
[*]改造了元数据管理模块,实现了元数据的动态注册
[*]实现了一个IL指令集到自定义的寄存器指令集的compiler
[*]实现了一个高效的寄存器解释器
[*]额外提供大量的instinct函数,提升解释器性能
[*]提供hotfix AOT的支持
项目地址:https://github.com/focus-creative-games/hybridclr- End -
推荐阅读

[*]一个C#开发的Windows远程桌面工具
[*]阿里、腾讯、百度大厂的程序员编程指南规范
[*]Net5开发的视频监控管理系统
[*]C#实现的滑块验证码
[*].Net服务器性能监控,应用耗时统一监控平台
专注分享编程知识、热门有用有趣的开源项目
页: [1]
查看完整版本: 一个近乎完美的Unity全平台原生c#热更方案