美文网首页
协程(六)有关优化

协程(六)有关优化

作者: 86a262e62b0b | 来源:发表于2019-07-30 22:23 被阅读0次

协程(一)基本使用
协程(二)协程什么时候调用
协程(三)IEnumerable、IEnumerator、foreach、迭代
协程(四)yield与迭代器
协程(五)简单模拟协程
协程(六)有关优化

  1. 优化GC:
  • 调用 StartCoroutine()会产生少量的内存垃圾,因为unity会生成实体来管理协程。所以在游戏的关键时刻应该限制该函数的调用。基于此,任何在游戏关键时刻调用的协程都需要特别的注意,特别是包含延迟回调的协程。
  • yield在协程中不会产生堆内存分配,但是如果yield带有参数返回,则会造成不必要的内存垃圾,例如:
yield return 0;
  • 由于需要返回0,引发了装箱操作,所以会产生内存垃圾。这种情况下,为了避免内存垃圾,我们可以这样返回:
yield return null;
  • 另外一种对协程的错误使用是每次返回的时候都new同一个变量,例如:
while(!isComplete)
{
    yield return new WaitForSeconds(1f);
}
  • 我们可以采用缓存来避免这样的内存垃圾产生:
WaitForSeconds delay = new WaiForSeconds(1f);
while(!isComplete)
{
    yield return delay;
}
  • 如果游戏中的协程产生了内存垃圾,我们可以考虑用其他的方式来替代协程。重构代码对于游戏而言十分复杂,但是对于协程而言我们也可以注意一些常见的操作,比如如果用协程来管理时间,最好在update函数中保持对时间的记录。如果用协程来控制游戏中事件的发生顺序,最好对于不同事件之间有一定的信息通信的方式。对于协程而言没有适合各种情况的方法,只有根据具体的代码来选择最好的解决办法。

待续。。。

相关文章

  • 协程(六)有关优化

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • Python协程

    目录:一、基于生成器的协程二、协程状态三、协程预激装饰器四、终止协程和异常处理五、协程返回值六、yield fro...

  • 协程

    作为协程的生成器 协程使用生成器函数定义 如果协程只需从客户接收数据,那么yield右边没有关键字,产出为隐式指定...

  • libgo sample8体验

    使用协程可以快速的优化传统代码,将其改造为并行处理程序。但是也有一些注意事项,例如协程函数访问外部变量导致性能反而...

  • 1.19Python之协程

    一、什么是协程 协程(coroutine)可以理解为是线程的优化,又称之为轻量级进程。它是一种比线程更节省资源、效...

  • 程序员的自我修养 IO/CUP密集型线程

      有关进程线程协程的概念在上一篇文章 golang协程为什么比线程轻量https://www.jianshu.c...

  • python异步协程(aiohttp,asyncio)

    python异步协程 环境:python3.7.0 协程 协程,英文叫做 Coroutine,又称微线程,纤程,协...

  • 协程(三)IEnumerable、IEnumerator、for

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(五)简单模拟协程

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(一)基本使用

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

网友评论

      本文标题:协程(六)有关优化

      本文链接:https://www.haomeiwen.com/subject/wdaorctx.html