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