В словарях 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? (Это только догадки)