孫廣東 2015.4.9 24:00
先來看看使用協(xié)程的作用1共有兩點(diǎn):
1)延時(shí)(等待)1段時(shí)間履行代碼;
2)等某個(gè)操作完成以后再履行后面的代碼。總結(jié)起來就是1句話:控制代碼在特定的時(shí)機(jī)履行。
協(xié)程不是線程,也不是異步履行的。協(xié)程和 MonoBehaviour 的 Update函數(shù)1樣也是在MainThread中履行的。使用協(xié)程你不用斟酌同步和鎖的問題。
對使用協(xié)程帶來GC問題,不推薦使用了!。
使用我之前封裝的 游戲簡單控制邏輯Clock類 可以完善解決
我想要指出的是使用 "yield return new WaitForSeconds()" 將會每幀致使垃圾分配GC,21個(gè)字節(jié),由于"new" 部份(相對標(biāo)準(zhǔn)的協(xié)程 "yield return null"只產(chǎn)生 9 個(gè)字節(jié))。
若要避免此問題,只是提早設(shè)置你的wait 等待的時(shí)間......
現(xiàn)在你coroutine 協(xié)程每次調(diào)用只會引發(fā)最低 的9 字節(jié) GC 分配 (不包括其他分配allocations,固然你可能通過您其他的代碼會致使 !)。
避免GC而做的事情的列表可能比較長。
- 不要使用Invoke或 StartCoroutine 的字符串。
- 不要使用GUILayout 和標(biāo)記您的 GUI MonoBehaviour來避免每幀 800bytes的GC產(chǎn)生。 http://docs.unity3d.com/ScriptReference/MonoBehaviour-useGUILayout.html
- 不要使用 GameObject.Tag 或 GameObject.Name
- 不要在Update中使用GetComponent ,如果可能的話將其緩存
- 不要使用 foreach
- 不要使用string + ----》 StringBuild 或 string.Format()