unity 下一帧执行_理解Unity中的优化(三):协程(Coroutines)

Coroutines:

Coroutines与其他脚本代码的执行方式不同。在性能分析中,大多数的脚本代码只会在Unity的生命周期方法下出现一次。但是协程总是会在两个地方出现。

在性能分析中,Coroutines中所有从协程开始到第一个yield中的代码,都会出现在协程出现的地方。通常,它会在StartCoroutine的方法中出现。由Unity回调产生的Coroutines(例如Start回调返回一个IEnumerator),首先会出现在各自的回调中。

协程中剩余的代码(从第一次恢复到完成执行),会出现在Unity的主循环,DelayedCallManager方法中。

要理解为什么出现这种情况,就需要理解协程实际上是怎么执行的:

协程运行时,C#编译器会自动生成一个类。这个类会在多个调用中,追踪Coroutine的状态。对于局部变量,由于协程中的局部变量在yield后也必须存在,所以这些局部变量会被封装到生成类里面。在协程执行期间,这些变量就会在托管堆中持续存在。这个对象也会追踪协程的内部状态:它会记录在yield之后,协程会在什么时候继续执行。

正因为如此,启动一个coroutine的内存开销等于一个固定的开销成本加上它的局部变量的开销。

开始调用一个协程的代码,在协程满足yield条件时,Unity会通过DelayedCallManager再次调用它们。因为协程有时候是被另一个协程调用的,这时候它们的开销就是上述两个被拆分的开销。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值