Unity 热更新基础知识

0.参考文章

https://zhuanlan.zhihu.com/p/685026219

1.一些名词

  • IL(Intermediate Language):中间语言(类似于汇编代码)
  • CIL(Common Intermediate Language):公共中间语言(特指在.Net平台下的IL标准)
  • CLR(Common Language Runtime):公共语言运行时,其实就是一个虚拟机,C#程序运行时都会启动它,它负责将IL翻译为对应平台的机器码,内存管理等

2.三种编译方式

  • JIT(Just in time):动态编译/即时编译
    编译时:C# => CIL
    运行时:CIL => 各平台机器码 => 执行(虚拟机CLR,JVM的工作)
    优点:编译时间短
    缺点:运行速度长
  • AOT(Ahead of time):静态编译/提前编译
    编译时:C# => CIL => 各平台机器码
    运行时: 执行 (仍有部分JIT模式)
    优点:运行速度快
    缺点:编译时间长
  • Full AOT(Full ahead of time):完全静态编译
    在AOT模式上去掉所有JIT编译 (ios只支持该模式)

3.Unity 两种脚本后端

3.1 Mono

在这里插入图片描述

3.2 IL2CPP

在这里插入图片描述

C++是不带托管内存的,也没有GC,所有内存都需要程序员自己管理,但我们在编写C#的时候是没有显式管理过内存的,所以为了支持C#的自动内存管理,IL2CPP运行时也有一个虚拟机在跑,虚拟机在托管着我们代码中分配的内存。

3.3 对比

特性MonoIL2CPP
编译方式即时编译(JIT),运行时编译代码静态编译(AOT),将IL转换为C++,然后编译为机器代码
性能性能较低,尤其是在复杂计算和大量对象时性能较高,适合高性能要求的游戏和应用
平台支持广泛支持,适用于大多数平台(但对iOS支持较差)支持大多数平台,尤其是iOS、Android和Windows,必须在iOS上使用
胞体大小通常较小(因为使用JIT,C#代码未完全转为机器码)通常较大(因为C#代码转为C++,需要生成完整的机器码),因此需要执行代码裁剪
构建时间构建时间较短构建时间较长,因涉及C++代码生成和编译
内存管理使用GC垃圾回收,可能导致延迟回收也使用GC,但在内存管理方面通常有更好的性能优化
功能支持支持更多动态功能,如反射、动态类型创建等对反射等动态功能支持较弱,需要额外处理
适用场景适合开发阶段和对性能要求不高的应用,快速迭代适合发布到生产环境,特别是对性能要求较高的应用和游戏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值