日期:2014-05-18  浏览次数:21284 次

for循环嵌套IF,和IF里嵌套for循环 效率的比较
2种代码。
1. for(i=0;i<N;i++)

{

  if(condition)

  dosomething;

  else

  dosomething;

}

2. if(condition)

{

  for(i=0;i<N;i++)

  dosomething;

}

else

 {

  for(i=0;i<N;i++)

  dosomething;

}

请大家说说哪种方法好!!

各有什么优缺点。

------解决方案--------------------
第二个 会节省点,大概

如果这两种情况可互换的话,第二种要好些,当然第一种你可以加break;goto;return;等语句,来优化
------解决方案--------------------
用Stopwatch watch = new Stopwatch(); 
watch.Start(); 


watch.Stop(); 
Console.WriteLine("执行时间为:{0}秒", watch.ElapsedMilliseconds / 1000.0f); 
测试下时间就知道了
第二中效果差些
------解决方案--------------------
C# code

    class Program
    {
        static int COUNT = (int)2e7;
        static void Main(string[] args)
        {
            View();
        }

        static void View()
        {
            StringBuilder sb = new StringBuilder();
            Stopwatch watch = new Stopwatch();
            for (int i = 0; i < 10; i++)
            {
                if (i % 2 == 0)
                {
                    sb.Append("Test1");
                    watch.Start();
                    Test1();
                    watch.Stop();
                }
                else
                {
                    sb.Append("Test2");
                    watch.Start();
                    Test2();
                    watch.Stop();
                }
                sb.AppendFormat(" : {0}\r\n", watch.ElapsedMilliseconds);
            }
            Console.WriteLine(sb);
        }

        static void work(int i)
        {
            i++;
        }
        static void Test1()
        {
            int number = 8;
            number++;
            for (int i = 0; i < COUNT; i++)
            {
                if (number > 10)
                {
                    work(6);
                }
                else
                {
                    work(5);
                }
            }
        }
        static void Test2()
        {
            int number = 8;
            number++;
            if (number > 10)
            {
                for (int i = 0; i < COUNT; i++)
                {
                    work(6);
                }
            }
            else
            {
                for (int i = 0; i < COUNT; i++)
                {
                    work(5);
                }
            }
        }

------解决方案--------------------
从汇编来说
第1种比第二种 多执行2*n-2 条 指令
1条比较 1条跳转

cpu处理的速度
P4 2.4Ghz(单核),也就是2.4 * (10 ^ 9)个时钟周期每秒,即2400000000。一般CPU每个时钟周期可以执行两条以上的汇编指令(这里没算分支预测,分支预测还会加倍)

48亿次循环后2者才差距1秒
基本上可以忽略