首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

for循环嵌套IF,跟IF里嵌套for循环 效率的比较

2012-08-13 
for循环嵌套IF,和IF里嵌套for循环 效率的比较2种代码。1.for(i0iNi++){if(condition)dosomethingelsed

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秒
基本上可以忽略

热点排行