Представьте код:
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 не существующих ключей. Но как только есть хотя бы один или несколько не существующих ключей, производительность второго снижается быстро.
