关与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下来的
这个测试跑了几次呢?
------解决方案--------------------
------解决方案--------------------C#我不熟,但我有一个观点,不要纠缠在一点点性能上,对于一个应用程序整体来说,那是无关紧要的。
把代码写得可读性强,让人一眼就看的明白,逻辑清晰,结构简单,这才是最重要的。
------解决方案--------------------
------解决方案--------------------一点一点就变成一片,一片一片就变成。。。
还是了解下的好
------解决方案--------------------
------解决方案--------------------switch 效率高, 从汇编代码可以看出来
------解决方案--------------------路过。。。
------解决方案--------------------这点儿“效率差异”如果不忽略不计就孔乙己了...
if语句和switch语句多数时候适用场景不同,没有可比性...
------解决方案--------------------楼主C#写的程序也要这么在乎效率啊?写的顺手就好了吧!
我以为只有嵌入式开发的那些单片机才要注重这个了。
------解决方案--------------------呵呵,虽然用像C#这样的语言写的程序,一般都不用太计较效率,但是
记在心里Coding的时候多注意点还是有好处的
------解决方案--------------------按照你上面的程序,switch的效率要比if高。而且我在我的电脑上实验,无论i去多大,甚至10亿100亿,switch的效率都要比if高。出现你所说的if比switch效率高,也有可能是datetime的精度造成的。下面是我用stopwatch做的测试
Stopwatch watch=new Stopwatch();
string a="asdfasdfasdf";