读书人

for循环嵌套IF跟IF里嵌套for循环 效

发布时间: 2012-08-13 13:21:53 作者: rapoo

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

读书人网 >C#

热点推荐