代表字典对交换机的性能

问题描述 投票:0回答:1

我正在编写一个解析器,该解析器根据值更改UI的某些部分。我必须处理大约20个案件的价值。我想知道传统的switch语句是否像:

switch(val)
        {
            case 0:
                f0();
                break;
            case 1:
                f1();
                break;
        }

或带有这样的代表字典:

Dictionary<int, Action> dict= new Dictionary<int, Action>
        {
            {0, f0},
            {1, f1}
        };

dict[val].Invoke();

哪个会表现更好?案件数量如何影响绩效?

c# dictionary delegates switch-statement
1个回答
0
投票

这是一个速度问题,所以请先阅读速度说明:https://ericlippert.com/2012/12/17/performance-rant/

使用实际的整数常量,我的赌注是在选择动作时,Swtich / case表现更好。这是在比较中使用常量而不是变量的好处。但是,在这种情况下,最大的消费者将是动作本身,而不是触发触发查找的动作。

总体上,次要注意事项-代码的可读性-在这里将更为重要。有20种可能的操作/选项,为了提高可读性,我绝对希望使用Dictionary<int, Action>变体。用for循环查找正确的键比使用20个case的switch语句更具可读性。

© www.soinside.com 2019 - 2024. All rights reserved.