这几天看大话设计模式,第一篇讲到一个计算机例子,提到Switch的效率比If要高很多,没亲手实践怎么会明白,还是自己试试吧。废话不多说,上代码
/*
* Created by SharpDevelop.
* User: shine
* Date: 2013/1/6 星期日
* Time: 15:56
*
* 测试Switch和IF的效率问题。单独的1次的测试中IF的效率高些,上百万次的测试Switch的效率要快很多。
*/
using System;
using System.Timers;
using System.Diagnostics;
namespace BetweenSwitchAndIf
{
/// <summary>
/// Description of Test.
/// </summary>
public class Test
{
public static void Main()
{
Console.WriteLine("Please input cycle times (default to all calculation)");
int testString = Convert.ToInt32(Console.ReadLine())*10000;
Console.WriteLine("----------------------------------------");
Console.WriteLine("Below is Swich Case Select");
new Select().SwitchSelect(testString);
Console.WriteLine("----------------------------------------");
Console.WriteLine("Below is If Else Select");
new Select().IfSelect(testString);
Console.ReadKey();
}
}
public class Select
{
static int Count = 10000;
public void SwitchSelect(int count)
{
Count = count;
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < Count; i++)
{
switch (i)
{
case 1 :
i++;
break;
case 2 :
i++;
break;
case 3 :
i++;
break;
case 4 :
i++;
break;
case 5 :
i++;
break;
case 6 :
i++;
break;
case 7 :
i++;
break;
case 8 :
i++;
break;
case 9 :
i++;
break;
default:
i++;
break;
}
}
sw.Stop();
Console.WriteLine("Span Time is {0} Milliseconds ",sw.ElapsedMilliseconds);
/*
Console.WriteLine("Begin Time is "+DateTime.Now.Millisecond);
switch (key)
{
case "1" :
Console.WriteLine("1");
break;
case "2" :
Console.WriteLine("2");
break;
case "3" :
Console.WriteLine("3");
break;
case "4" :
Console.WriteLine("4");
break;
case "5" :
Console.WriteLine("5");
break;
case "6" :
Console.WriteLine("6");
break;
case "7" :
Console.WriteLine("7");
break;
case "8" :
Console.WriteLine("8");
break;
case "9" :
Console.WriteLine("9");
break;
default:
Console.WriteLine("else");
break;
}
Console.WriteLine("End Time is "+DateTime.Now.Millisecond);
*/
}
public void IfSelect(int count)
{
Count = count;
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < Count; i++)
{
if(i == 1)
{
i++;
}
else if (i == 2)
{
i++;
}
else if (i == 3)
{
i++;
}
else if (i == 4)
{
i++;
}
else if (i == 5)
{
i++;
}
else if (i == 6)
{
i++;
}
else if (i == 7)
{
i++;
}
else if (i == 8)
{
i++;
}
else if (i == 9)
{
i++;
}
else
{
i++;
}
}
sw.Stop();
Console.WriteLine("Span Time is {0} Milliseconds ",sw.ElapsedMilliseconds);
/*
Console.WriteLine("Begin Time is "+DateTime.Now.Millisecond);
if(key == "1")
{
Console.WriteLine("1");
}
else if (key == "2")
{
Console.WriteLine("2");
}
else if (key == "3")
{
Console.WriteLine("3");
}
else if (key == "4")
{
Console.WriteLine("4");
}
else if (key == "5")
{
Console.WriteLine("5");
}
else if (key == "6")
{
Console.WriteLine("6");
}
else if (key == "7")
{
Console.WriteLine("7");
}
else if (key == "8")
{
Console.WriteLine("8");
}
else if (key == "9")
{
Console.WriteLine("9");
}
else
{
Console.WriteLine("else");
}
Console.WriteLine("End Time is "+DateTime.Now.Millisecond);
*/
}
}
}
输入条件:300(实际是3000000)
结果如下:
Switch:9 Milliseconds
If :35 Milliseconds
Switch的速度比IF高很多。
注:注释部分的代码,我测试的是单次从开始到结束的时间,但是那部分的代码IF的速度要比Switch快些。实在疑惑的很,希望有人能给我解答