关于if与switch效率优化的说明

 

一、关于效率:同等情况下,用switch的效率要比if高很多,因为switch有一个索引跳转的过程,效率对比请参考这2篇博文:

博文1:http://blog.csdn.net/ahhsxy/article/details/6598587

博文2:http://www.liangshunet.com/ca/201303/886427761.htm

二、关于优化,再引入一个概念:

程序的圈复杂度是指的执行路径的数量,计算方法:

1.从1开始,一直往下通过程序。

2.加1:遇到if,for,while,and,or,else时加1

3.case每种情况加1,程序越低复杂度越好,低:1-4,中:5-7,高:8-10-更多。比如,下面2个的圈复杂度是相同的。都是2

//题目:输入一个数字,如果大于0则加一,小于0就减一然后输出
int[] values = {30,-5,90,100,0,-9 };
for (int i = 0; i < values.Length; i++)
{ //方法一:用switch代替if;
bool j = values[i] < 0;
switch (j)
{
case true: values[i]--; break;
case false: if(values[i]!=0){values[i]++;} break;
}
//方法二:用if
//if (values[i] < 0)
//{
// values[i]--;
//}
//if (values[i] > 0)
//{
// values[i]++;
//}
}
for (int i = 0; i < values.Length; i++)
{
Console.WriteLine(values[i]);
}
Console.ReadKey();

总结:只是列举了一种效率优化的方式,起抛砖引玉的作用吧。if和switch既然效率绝大多数差距很大,我们在更多时候,可以养成直接用switch考虑问题,舍弃if的思维。

其实说白了switch比较高级,同样圈复杂度的情况下,我们思考的多了,计算机需要思考的就少,反之依然,为了效率优化,为什么不用switch呢?

posted on 2013-11-04 11:21  鸣动我心  阅读(1123)  评论(0编辑  收藏  举报