【Unity】 C# 协程 WaitForSeconds产生GC(Garbage Collection)问题
来源:互联网 发布:python获取当天日期 编辑:程序博客网 时间:2024/06/05 06:09
原文链接:http://blog.csdn.net/u010019717/article/details/44948903
孙广东 2015.4.9 24:00
先来看看使用协程的作用一共有两点:
1)延时(等待)一段时间执行代码;
2)等某个操作完成之后再执行后面的代码。总结起来就是一句话:控制代码在特定的时机执行。
协程不是线程,也不是异步执行的。协程和 MonoBehaviour 的 Update函数一样也是在MainThread中执行的。使用协程你不用考虑同步和锁的问题。
对于使用协程带来GC问题,不推荐使用了!。
使用我之前封装的 游戏简单控制逻辑Clock类 可以完美解决
IEnumerator myAwesomeCoroutine() { while (true) { doAwesomeStuff(); yield return new WaitForSeconds(waitTime); }}
我想要指出的是使用 “yield return new WaitForSeconds()” 将会每帧导致垃圾分配GC,21个字节,由于”new” 部分(相对于标准的协程 “yield return null”只产生 9 个字节)。
若要避免此问题,只是提前设置你的wait 等待的时间……
WaitForSeconds shortWait = new WaitForSeconds(0.1f); WaitForSeconds longWait = new WaitForSeconds(5.0f); IEnumerator myEvenAwesomerCoroutine() { while (true) { if (iNeedToDoStuffFast) { doAwesomeStuffReallyFast(); yield return shortWait; } else{ dontDoMuch(); yield return longWait; } } }
现在你coroutine 协程每次调用只会引起最低 的9 字节 GC 分配 (不包括其他分配allocations,当然你可能通过您其他的代码会导致 !)。
防止GC而做的事情的列表可能比较长。
不要使用Invoke或 StartCoroutine 的字符串。
不要使用GUILayout 和标记您的 GUI MonoBehaviour来防止每帧 800bytes的GC发生。 http://docs.unity3d.com/ScriptReference/MonoBehaviour-useGUILayout.html
不要使用 GameObject.Tag 或 GameObject.Name
不要在Update中使用GetComponent ,如果可能的话将其缓存
不要使用 foreach
- 不要使用string + —-》 StringBuild 或 string.Format()
- 【Unity】 C# 协程 WaitForSeconds产生GC(Garbage Collection)问题
- C# 协程 WaitForSeconds产生GC(Garbage Collection)问题
- Unity游戏的GC(garbage collection)优化
- java gc(garbage collection)
- JVM GC(Garbage Collection)
- GC - (一) What Is Garbage Collection?
- GC (二)Garbage Collection in Java
- Java垃圾回收GC(Garbage Collection)
- GC(Garbage collection)垃圾回收
- Java Garbage Collection (GC) Tuning
- GC(Garbage Collection) 垃圾收集
- Java Garbage Collection(GC)介绍
- JVM学习之垃圾回收(GC:garbage collection)
- 关于GC(Garbage Collection)的一些认识
- Java面试题--JVM 底层 与 GC(Garbage Collection)
- Java垃圾回收(Garbage Collection, GC)机制
- 【Garbage Collection】GC垃圾回收机制(一)
- Websphere GC分析器(Garbage collection Analyser)GA
- Activity 生命周期与启动模式
- Oracle group up函数与rollup的使用说明
- Synchronized的用法
- ios下iframe内的加载更多为什么失效了?
- android开发中,可能会导致内存泄露的问题
- 【Unity】 C# 协程 WaitForSeconds产生GC(Garbage Collection)问题
- ssh的前世今生
- JD-Eclipse 安装
- 强制跳转HTTPS
- 宏函数的注意事项
- python截屏
- 小生我怕怕私房版OllyDBG全自动下断版
- 在springMVC中配置<mvc>标签,运行时报错 无法找到MVC元素
- linux下find用法 find -name *.so -exec ll {} \;