关于“for”的速度

时间:2012-03-15 02:56:53

标签: c#-4.0 .net-4.0

有一项任务要知道哪些代码更快以及原因:

//A
        Stopwatch sw = new Stopwatch();
        Int32[] a = new Int32[10000000];
        int len = a.Length;
        sw.Start();
        //for (Int32 index = 0; index < len; index++)
        //{

        //    a[index] = 6;
        //}
        //sw.Stop();


//B
        for (Int32 index = 0; index < a.Length; index++)
        {

            a[index] = 6;
        }
        sw.Stop();

        var time = sw.ElapsedMilliseconds;

方法B的平均时间比A强更多。有人解释原因吗?

2 个答案:

答案 0 :(得分:0)

在情况B中,每次循环时,运行时调用代码来获取数组的长度。

在A中,这样做一次并保存结果。

我一直认为运行时会优化该循环,它们会是相同的。您的结果有显着差异吗?您是否经过了几次测试才能发现它始终不同?

答案 1 :(得分:0)

我的猜测是因为每次循环时轮询数组的长度,而A方法只需要检查长度的缓存值。所以,最终,这归结为caching

的想法