您的位置:首页 > 移动开发 > Unity3D

[Unity优化]一个简单的对象池及其测试(二)

2015-03-07 11:46 549 查看
测试代码如下:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class TestObjectPool : MonoBehaviour {

    public GameObject prefab;
    public int prefabAmount = 5000;
    List<GameObject> tempObj = new List<GameObject>();

	// Update is called once per frame
	void Update () 
    {
        if (Input.GetKeyDown(KeyCode.Q))
        {
            for (int i = 0; i < prefabAmount; i++)
            {
                GameObject obj = Instantiate(prefab) as GameObject;
                tempObj.Add(obj);
            }
        }

        if (Input.GetKeyDown(KeyCode.W))
        {
            for (int i = 0; i < prefabAmount; i++)
            {
                Destroy(tempObj[i]);
            }
            tempObj.Clear();
        }

        if (Input.GetKeyDown(KeyCode.A))
        {
            for (int i = 0; i < prefabAmount; i++)
            if (GetComponent<ObjectPool>())
            {
                GameObject obj = ObjectPool.instance.GetPoolObject(prefab.name, true);
                tempObj.Add(obj);
            }
        }

        if (Input.GetKeyDown(KeyCode.S))
        {
            for (int i = 0; i < prefabAmount; i++)
            if (GetComponent<ObjectPool>())
            {
                ObjectPool.instance.SetPoolObject(tempObj[i]);
            }
            tempObj.Clear();      
        }
	}
}


本人对无对象池、有对象池的分别测试50次,测试为显示五千个cube。工程在运行时,无任何操作的情况下FPS大概为80~90,在FPS处于80~90的情况下进行实例化或者从对象池中取出对象。

通过对按下瞬间,FPS的变化,得出的结果如下:使用对象池时FPS主要在30~50,有时低于30,会出现低于10的情况;不使用对象池时FPS主要在10~35,会出现低于10的情况。

从最高值上看,使用对象池时FPS高于40的概括大概在百分之20~30,而不使用对象池时FPS在这50次的测试中没有高于40的。总的来说,使用对象池还是有一定的优化作用的。

但让本人不解的是,即使使用对象池,也会出现FPS低于10的情况,这是什么原因呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: