近期热门
粉丝909
关注 205
获赞 1007
[转]Unity里面应尽量避免使用foreach

[U3D] [转]Unity里面应尽量避免使用foreach

[复制链接]
4238 0 0 0 12年前 举报


抛开其他的不说,我只关注GC Alloc,因为这点是造成unity游戏偶尔卡帧的罪魁祸首,举一个代码例子:
  1. using UnityEngine;
  2. using System.Collections;

  3. public class ForeachTest : MonoBehaviour {

  4.     protected ArrayList m_array;

  5.     void Start ()
  6.     {
  7.         m_array = new ArrayList();
  8.         for (int i = 0; i < 2; i++)
  9.             m_array.Add(i);
  10.     }
  11.    
  12.     void Update ()
  13.     {
  14.         for (int i = 0; i < 1000; i++)
  15.         {
  16.             foreach (int e in m_array)
  17.             {
  18.                 //big gc alloc!!! do not use this code!
  19.             }
  20.         }

  21.         for (int i = 0; i < 1000; i++)
  22.         {
  23.             for (int k = 0; k < m_array.Count; k++)
  24.             {
  25.                 //no gc alloc!!
  26.             }
  27.         }
  28.     }
  29. }
复制代码
第一个循环大概会造成2.3K的GC Alloc(什么事都没做就耗费这么多GC。。。)。

第二个循环则没有任何GC Alloc。

所以,不要途方便,到处哪都用foreach循环。


转自:http://shallway.net/blog/unity%E ... BF%E7%94%A8foreach/
0
点赞
0
打赏
0
添加到收藏夹

0

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论0
您需要登录后才可以回帖 登录

暂无评论,去成为第一人吧
您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器