现在的位置: 首页 > 综合 > 正文

for和foreach的执行效率的问题之新发现

2012年11月27日 ⁄ 综合 ⁄ 共 1768字 ⁄ 字号 评论关闭

看了 冰戈的文章,根据他的我也测试了一下,结果跟他差不多,但是在无意中发现,下面的代码执行结果就出人意料,目前我还不知道是原因导致这样的结果,代码如下:

        private static void  TestForForeach(int count)
        
{
            
double[] test=new double[count];
            
for(int i=0;i<count;i++)
            
{
                test[i]
=i;
            }

        
            
double sum1=0;

            DateTime start
=DateTime.Now;
            
foreach(double k in test)
            
{
                sum1
+=k;
            }

            DateTime end
=DateTime.Now;

            Console.WriteLine(
"TestForForeach2->\nForeach:开始时间{0},结束时间{1},\n相差:{2}",start,end,end-start);

        
            sum1
=0.0;

            start
=DateTime.Now;
            
for(int i=0;i<count;i++)
            
{
                sum1
+=test[i];
            }

            end
=DateTime.Now;

            Console.WriteLine(
"TestForForeach2->\nFor:开始时间{0},结束时间{1},\n相差:{2}",start,end,end-start);
        }

上面这段代码是没有什么差别的。但是下面代码,结果就会出人意料了。

        private static void  TestForForeach1(int count)
        
{
            
double[] test=new double[count];
            
for(int i=0;i<count;i++)
            
{
                test[i]
=i;
            }

        
            
double sum1=0;

            DateTime start
=DateTime.Now;
            
for(int i=0;i<count;i++)
            
{
                sum1
+=test[i];
            }

            DateTime end
=DateTime.Now;

            Console.WriteLine(
"TestForForeach1->\nFor:开始时间{0},结束时间{1},\n相差:{2}",start,end,end-start);

        
            sum1
=0.0;

            start
=DateTime.Now;
            
foreach(double k in test)
            
{
                sum1
+=k;
            }

            end
=DateTime.Now;

            Console.WriteLine(
"TestForForeach1->\nForeach:开始时间{0},结束时间{1},\n相差:{2}",start,end,end-start);
        }

这段代码的结果中,for与foreach的执行时间差不多,而且相对foreach还会快点,我查看了一下MSIL代码,结果是一样的,有谁知道原因的可以分析一下吗?

抱歉!评论已关闭.