日期:2014-05-17  浏览次数:20889 次

关与if与switch效率问题
写了个小的测试程序,不知道是否合乎逻辑,请高手指正
C# code
string a="asdfasdfasdf";
            DateTime now = DateTime.Now;
            for (int i = 0; i < 100000000; i++)
            {
                if (a=="123456")
                { }
                else if (a == "asdfasdfasdf")
                { }
            }
            DateTime end1 = DateTime.Now;

            for (int i = 0; i < 100000000; i++)
            { 
                switch (a)
                {
                    case "123456":
                        break;
                    case "asdfasdfasdf":
                        break;
                    default:
                        break;

                }
            }
            DateTime end2 = DateTime.Now;

            System.TimeSpan ifdiff = end1 - now;
            System.TimeSpan swithdiff = end2 - end1;
            MessageBox.Show(ifdiff.Milliseconds.ToString()+"     "+swithdiff.Milliseconds.ToString());


用这个代码测试
i在千万级的时候,相对来说IF用的时是比较多的.
但在亿级的时候switch用时比较多,而且时间不在一个数量级别上..


------解决方案--------------------
強人.....有好電腦啊...如果是我的電腦找就見耶穌了
------解决方案--------------------
到底哪個快啊?兄弟!
------解决方案--------------------
switch能做的if else if 都能做到,
而if else能做的switch 很多都不能做到

适用环境不同,可比性不是很强
------解决方案--------------------

------解决方案--------------------
理论上是switch快,if else是一个一个条件比对下来的,switch是查表jump下来的
这个测试跑了几次呢?
------解决方案--------------------
探讨
switch能做的if else if 都能做到,
而if else能做的switch 很多都不能做到

适用环境不同,可比性不是很强

------解决方案--------------------
C#我不熟,但我有一个观点,不要纠缠在一点点性能上,对于一个应用程序整体来说,那是无关紧要的。
把代码写得可读性强,让人一眼就看的明白,逻辑清晰,结构简单,这才是最重要的。

------解决方案--------------------
探讨

switch能做的if else if 都能做到,
而if else能做的switch 很多都不能做到

适用环境不同,可比性不是很强

------解决方案--------------------
一点一点就变成一片,一片一片就变成。。。

还是了解下的好
------解决方案--------------------
探讨

引用:
理论上是switch快,if else是一个一个条件比对下来的,switch是查表jump下来的
这个测试跑了几次呢?


有十几次吧.想不通了.就过来求救了..

------解决方案--------------------
switch 效率高, 从汇编代码可以看出来
------解决方案--------------------
路过。。。
------解决方案--------------------
这点儿“效率差异”如果不忽略不计就孔乙己了...

if语句和switch语句多数时候适用场景不同,没有可比性...
------解决方案--------------------
楼主C#写的程序也要这么在乎效率啊?写的顺手就好了吧!
我以为只有嵌入式开发的那些单片机才要注重这个了。
------解决方案--------------------
呵呵,虽然用像C#这样的语言写的程序,一般都不用太计较效率,但是
记在心里Coding的时候多注意点还是有好处的

------解决方案--------------------
按照你上面的程序,switch的效率要比if高。而且我在我的电脑上实验,无论i去多大,甚至10亿100亿,switch的效率都要比if高。出现你所说的if比switch效率高,也有可能是datetime的精度造成的。下面是我用stopwatch做的测试
Stopwatch watch=new Stopwatch();
string a="asdfasdfasdf";