写了个小的测试程序,不知道是否合乎逻辑,请高手指正
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用时比较多,而且时间不在一个数量级别上..
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 快
而if else能做的switch 很多都不能做到适用环境不同,可比性不是很强
这个测试跑了几次呢?
我估计有一些客观因素干扰,毕竟switch的条件相对if else简单,编译器可以对它做各种优化,理论上的性能会更高些,这也是很多人建议能用switch的场合不用if else的原因
不过楼上也有人提到了,if else灵活度更高,但是不好理解
记在心里Coding的时候多注意点还是有好处的
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();
switch(a){case 1:break;......case 1000:break;},不用我说,一跑效率就看出来了