Поскольку Dictionary без велосипедов не сериализуется в Unity3D, я решил протестировать а стоит ли вообще использовать. Выше ли производительность?
Unity Version 4.6.1f1
Результаты:
Количество: 100000
Dictionary search time: 437
List search time: 555
Количество: 10000
Dictionary search time: 35
List search time: 56
Количество: 10
Dictionary search time: 0
List search time: 0
Unity Version 4.6.1f1
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
[System.Serializable]
public class SomeData
{
public string name;
public Vector3 position;
public Vector3 rotation;
public string key;
public string about;
public int dataID;
public SomeData(string name, Vector3 position, Vector3 rotation, string key, string about, int dataID)
{
this.name = name;
this.position = position;
this.rotation = rotation;
this.key = key;
this.about = about;
this.dataID = dataID;
}
}
public class DirListTest : MonoBehaviour
{
private List<SomeData> list = new List<SomeData>();
private Dictionary<string, SomeData> dict = new Dictionary<string, SomeData>();
private Stopwatch stopWatch = new Stopwatch();
private int count = 100000;
private void Awake()
{
int i;
for (i = 0; i < count; ++i)
{
SomeData data = new SomeData(
i.ToString("#000000"),
Vector3.one,
Vector3.zero,
i.ToString(),
string.Empty,
i
);
list.Add(data);
dict.Add(data.name, data);
}
StartCoroutine(Test());
}
IEnumerator Test()
{
yield return new WaitForSeconds(2f);
int i;
string search;
SomeData data;
stopWatch.Reset();
stopWatch.Start();
for (i = count - 1; i >= 0; --i)
{
search = i.ToString("#000000");
if (dict.ContainsKey(search))
{
data = dict[search];
}
}
stopWatch.Stop();
UnityEngine.Debug.Log("Dictionary search time: " + stopWatch.ElapsedMilliseconds.ToString());
stopWatch.Reset();
stopWatch.Start();
for (i = count - 1; i >= 0; --i)
{
search = i.ToString("#000000");
if (search.CompareTo(list[i].name) == 0)
{
data = list[i];
}
}
stopWatch.Stop();
UnityEngine.Debug.Log("List search time: " + stopWatch.ElapsedMilliseconds.ToString());
}
}
Результаты:
Количество: 100000
Dictionary search time: 437
List search time: 555
Количество: 10000
Dictionary search time: 35
List search time: 56
Количество: 10
Dictionary search time: 0
List search time: 0
Комментарии
Отправить комментарий