유니티 Dictionary 키 찾기 비교
ContainsKey VS TryGetValue
각각의 함수는 Dictionary 자료구조에서 키를 찾는 함수이다.
두 함수를 비교하여 어떤 함수가 더 빠른지 그리고 왜 빠른지 알아보도록 하겠습니다.
각각의 함수를 1000번씩 호출해보겠습니다.
ContainsKey
Dictionary<string, int> dic = new Dictionary<string, int>();
private void Awake() {
int len = 100000000;
int outValue; dic["str"] = 1;
sw.Start();
for ( int i = 0; i < len; i++ ) {
if (dic.ContainsKey("str") == true) {
outValue = dic["str"]; }
}
sw.Stop();
UnityEngine.Debug.Log(sw.ElapsedMilliseconds);
}
TryGetValue
Dictionary<string, int> dic = new Dictionary<string, int>();
private void Awake() {
int len = 100000000;
int outValue; dic["str"] = 1;
sw.Start();
for ( int i = 0; i < len; i++ ) {
dic.TryGetValue( "str", out outValue );
}
sw.Stop();
UnityEngine.Debug.Log(sw.ElapsedMilliseconds);
}
ContainsKey | TryGetValue |
4048 ms | 2117 ms |
2배의 속도 차이가 나는 것을 볼 수 있습니다.
동작하는 방식은 내부적으로는 같지만 ContainsKey는 값을 담기 위해서 한번더 참조를 해야하는 문제로 시작이 배로 걸리는 현상입니다. 하지만 단순히 키가 있는지만 알고 싶다면 오히려 ContainsKey가 조금 더 빠른 결과를 보여줍니다.
*Key만 찾기
ContainsKey | TryGetValue |
2087 ms | 2116 ms |
결론은 대부분의 상황에서 TryGetValue를 사용하자!