Представьте код:
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;
}
}
Мне было любопытно, есть ли разница в производительности этих двух функций, потому что первый должен быть SLOWER, чем второй, - учитывая, что ему нужно дважды проверять, если словарь содержит значение, а вторая функция должна получить доступ словарь только один раз, но WOW, это фактически противоположно:
Петля для 1 000 000 значений (со 100 000 существующих и 900 000 не существующих):
первая функция: 306 миллисекунд
вторая функция: 20483 миллисекунды
Почему это?
EDIT: как вы можете заметить в комментариях ниже этого вопроса, производительность второй функции на самом деле немного лучше, чем первая, если есть 0 не существующих ключей. Но как только есть хотя бы один или несколько не существующих ключей, производительность второго снижается быстро.