写了个小的测试程序,不知道是否合乎逻辑,请高手指正
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用时比较多,而且时间不在一个数量级别上..

解决方案 »

  1.   


    在千万级别上Switch 快
    在亿级别上if 快
      

  2.   

    switch能做的if else if 都能做到,
    而if else能做的switch 很多都不能做到适用环境不同,可比性不是很强
      

  3.   

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

  4.   


    我估计有一些客观因素干扰,毕竟switch的条件相对if else简单,编译器可以对它做各种优化,理论上的性能会更高些,这也是很多人建议能用switch的场合不用if else的原因
    不过楼上也有人提到了,if else灵活度更高,但是不好理解
      

  5.   

    switch   效率高,     从汇编代码可以看出来   
      

  6.   

    这点儿“效率差异”如果不忽略不计就孔乙己了...if语句和switch语句多数时候适用场景不同,没有可比性...
      

  7.   

    呵呵,虽然用像C#这样的语言写的程序,一般都不用太计较效率,但是
    记在心里Coding的时候多注意点还是有好处的
      

  8.   

    按照你上面的程序,switch的效率要比if高。而且我在我的电脑上实验,无论i去多大,甚至10亿100亿,switch的效率都要比if高。出现你所说的if比switch效率高,也有可能是datetime的精度造成的。下面是我用stopwatch做的测试
    Stopwatch watch=new Stopwatch();
    string a="asdfasdfasdf";
    watch.Start();
                for (int i = 0; i < 10000000; i++)
                {
                    if (a=="123456")
                    { }
                    else if (a == "asdfasdfasdf")
                    { }
                }
                watch.Stop();
                Console.WriteLine(watch.ElapsedMilliseconds);
                watch.Reset();
                watch.Start();            for (int i = 0; i < 10000000; i++)
                { 
                    switch (a)
                    {
                        case "123456":
                            break;
                        case "asdfasdfasdf":
                            break;
                        default:
                            break;                }
                }
                watch.Stop();
                Console.WriteLine(watch.ElapsedMilliseconds);
                Console.Read();
      

  9.   

    直觉上就会感觉 ,switch效率要高,switch一个列表,一查就到,相当于索引,而多if else ele if块这样的写着也比较麻烦,条件又多,效率自然不会好到那里去吧。
      

  10.   

    单看结构 感觉 switch 快你看 if elseif 是一次判断的而switc就一次 直接OVER了
      

  11.   

    LZ的程序简单了,看不出效率来,你试试这样写if(a==1){}else if(a==2){}......else if(a==1000){}
    switch(a){case 1:break;......case 1000:break;},不用我说,一跑效率就看出来了