[Unity最適化]簡単なオブジェクトプールとそのテスト(二)


テストコードは次のとおりです.
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回テストし、5千個の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以下になるのはどういう理由なのか、私にはわかりません.