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);
测试下时间就知道了
第二中效果差些
[解决办法]
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秒
基本上可以忽略