for和foreach区别

1语法:for循环的语法比foreach循环更加灵活,可以控制循环的起始值、终止值和步长等参数。而foreach循环的语法比较简单,只需要指定要遍历的集合或数组即可。

2性能:在遍历数组时,for循环的性能比foreach循环更好,因为for循环直接使用数组的索引来访问元素,而foreach循环需要先获取迭代器,然后再通过迭代器来访问元素。
但在遍历集合时,foreach循环的性能比for循环更好,因为集合的元素数量可能会动态变化,而foreach循环可以自动适应集合的变化。 3可读性:foreach循环比for循环更易于理解和阅读,因为它的语法更加简洁明了,不需要关注循环的起始值、终止值和步长等参数。

上面是chatgpt给的答案,我觉得性能差不多,迭代器内部也是索引。

public class stringTest{
    public static void Show(){
        // var ss = new int[]{1,2,3,4};
        // var iterator = ss.GetEnumerator();
        // while(iterator.MoveNext()){
        //     System.Console.WriteLine(iterator.Current);
        // }

        Console.WriteLine("processing...");
            int size = 300_000_000;
            List<int> arr = new List<int>(size);
            for (int i = 0; i < size; i++)
                arr.Add(i);

            var t1 = DateTime.Now;
            double sum1 = 0;
            for (int i = 0; i < arr.Count ; i++)
                sum1 += arr[i];
            var t2 = DateTime.Now;
            double sum2 = 0;
            foreach (var v in arr)
                sum2 += v;
            var t3 = DateTime.Now;
            var iterator = arr.GetEnumerator();
            double sum3 = 0;
            while(iterator.MoveNext()){
                sum3 += iterator.Current;
            }
            var t4 = DateTime.Now;
            Console.WriteLine($"done.\nResult: sum1={sum1}, sum2={sum2}, sum3={sum3}");
            Console.WriteLine($"time1: {t2 - t1}\ntime2: {t3 - t2}\ntime3: {t4 - t3}");
    }
}

结果是:

processing...
done.
Result: sum1=44999999767108860, sum2=44999999767108860, sum3=44999999767108860
time1: 00:00:01.5251589
time2: 00:00:01.3958917
time3: 00:00:01.4024989

我觉得只是写法上不一样,性能就这样吧,CLR也会对Foreach代码进行优化,这能差到哪去,foreach走的类似是链表循环,不用从头开始,速度稍微快点。环境是net core7.0.

posted @ 2023-05-24 10:14  vba是最好的语言  阅读(225)  评论(0编辑  收藏  举报