코드를 상상해보십시오.
public class obj
{
// elided
}
public static Dictionary<string, obj> dict = new Dictionary<string, obj>();
방법 1
public static obj FromDict1(string name)
{
if (dict.ContainsKey(name))
{
return dict[name];
}
return null;
}
방법 2
public static obj FromDict2(string name)
{
try
{
return dict[name];
}
catch (KeyNotFoundException)
{
return null;
}
}
두 함수의 성능에 차이가 있는지 궁금합니다. 첫 번째 함수는 두 번째 함수보다 느려 야합니다. 한 번만 와우, 그것은 실제로 반대입니다.
1 만개의 값에 대한 루프 (기존의 10 만개와 존재하지 않는 9 만개의 경우) :
첫 번째 기능 : 306 밀리 초
두 번째 기능 : 20483 밀리 초
왜 그런 겁니까?
편집 :이 질문 아래 주석에서 알 수 있듯이 두 번째 기능의 성능은 실제로 기존 키가 0이 아닌 경우 첫 번째 기능보다 약간 우수합니다. 그러나 기존 키가 아닌 하나 이상의 키가 있으면 두 번째 키의 성능이 급격히 떨어집니다.
O(1)
딕셔너리 룩업 보다 예외 던지기와 관련하여 훨씬 더 많은 명령어가 있습니다 . 특히 두 가지 O(1)
작업을 수행하는 것이 여전히 무증상 이기 때문 O(1)
입니다.
ContainsKey
기대된다O(1)
...