В словарях switch и vs для значения Func, что быстрее и почему?

Предположим, есть следующий код:

private static int DoSwitch(string arg)
{
    switch (arg)
    {
        case "a": return 0;
        case "b": return 1;
        case "c": return 2;
        case "d": return 3;
    }
    return -1;
}

private static Dictionary<string, Func<int>> dict = new Dictionary<string, Func<int>>
    {
        {"a", () => 0 },
        {"b", () => 1 },
        {"c", () => 2 },
        {"d", () => 3 },
    };

private static int DoDictionary(string arg)
{
    return dict[arg]();
}

Перебирая оба метода и сравнивая, я получаю, что словарь работает немного быстрее, даже когда «a», «b», «c», «d» расширен, чтобы включить больше ключей. Почему это так?

Связано ли это с цикломатической сложностью? Это потому, что джиттер компилирует операторы возврата в словаре в нативный код только один раз? Это потому, что поиск в словаре O (1), которыйможет быть не так для оператора switch? (Это только догадки)

Ответы на вопрос(4)

Ваш ответ на вопрос