日期:2014-05-18 浏览次数:21466 次
    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秒
基本上可以忽略