for vs foreach
来源:互联网 发布:古代战争 知乎 编辑:程序博客网 时间:2024/06/05 01:51
原文地址:http://jacksondunstan.com/articles/3165
正文:
foreach循环非常好使,但是for循环更快?这是个简单的问题,但是却在很多代码里有广泛的影响。本文测试了for和foreach,看看用两者遍历一个数组和list到底谁快。
测试很简单,我做了一个object数组,和一个object的System.Collections.Generic.List,它们长度确定,分别使用for和foreach循环遍历。因为循环小于1毫秒,所以每个循环运行100000次。
测试代码:
using System;using System.Collections.Generic;using UnityEngine;public class TestScript : MonoBehaviour{ private const int NumIterations = 100000; private string report; void Start() { report = "Size,Array For Time,Array Foreach Time,List For Time,List Foreach Time\n"; var sizes = new []{10,100,1000}; foreach (var size in sizes) { report += Test(size); } } private string Test(int size) { var array = new object[size]; var list = new List<object>(size); list.AddRange(array); var stopwatch = new System.Diagnostics.Stopwatch(); object obj = null; stopwatch.Reset(); stopwatch.Start(); for (var iteration = 0; iteration < NumIterations; ++iteration) { for (int i = 0, len = array.Length; i < len; ++i) { obj = array[i]; } } var arrayForTime = stopwatch.ElapsedMilliseconds; stopwatch.Reset(); stopwatch.Start(); for (var iteration = 0; iteration < NumIterations; ++iteration) { foreach (var cur in array) { } } var arrayForeachTime = stopwatch.ElapsedMilliseconds; stopwatch.Reset(); stopwatch.Start(); for (var iteration = 0; iteration < NumIterations; ++iteration) { for (int i = 0, len = list.Count; i < len; ++i) { obj = list[i]; } } var listForTime = stopwatch.ElapsedMilliseconds; stopwatch.Reset(); stopwatch.Start(); for (var iteration = 0; iteration < NumIterations; ++iteration) { foreach (var cur in list) { } } var listForeachTime = stopwatch.ElapsedMilliseconds; return size + "," + arrayForTime + "," + arrayForeachTime + "," + listForTime + "," + listForeachTime + "\n"; } void OnGUI() { GUI.TextArea(new Rect(0, 0, Screen.width, Screen.height), report); }}
如果你自己想试试,可以把代码复制到TestScript.cs文件,把这个文件放到Unity的Assets文件夹下,附加到摄像机对象上,然后在64位处理器的non-development模式下构建,并运行在640*480的窗口模式下。
我测试的机器配置:
- 2.3 Ghz Intel Core i7-3615QM •Mac OS X 10.10.4
- Unity 5.1.2f1, Mac
- OS X Standalone, x86_64, non-development
- 640×480, Fastest, Windowed
下面是我得到的测试结果:
结论是,对数组来说,foreach比for要快。对于List,for循环比较快。当你循环一个很长的数组或者list的时候得注意点,但是注意这个测试循环了100000次,所以实际差别会小很多。遍历一百万个元素的list大概会花费8毫秒,在这个情况下用for循环会更好的优化,想要继续优化,可以参考这个文章(不安全的代码循环)。
综上所述,for和foreach遍历速度有差别,而且依赖于你要遍历啥。两者速度都很快,在你的app里可能他们的速度差别没那么大。
0 0
- for vs foreach
- for vs foreach
- foreach VS for loop
- 集合遍历:for VS foreach
- c# 中的 for vs foreach
- 0.033秒的艺术 --- for vs. foreach
- for VS. foreach 那个性能更高,为什么,怎么选择
- for foreach
- for&foreach
- for foreach
- foreach vs List<T>.Foreach
- for in.forEach.for
- map vs forEach
- 从for到foreach
- for 循环,foreach循环
- for 和 foreach区别
- .net for foreach
- foreach for的演变
- 性能优化之Java(Android)代码优化
- windows核心编程学习体会1:获取进程实例句柄
- 10. CSS 文本
- extjs,后台递归获取权限树,进行展示
- 剑指offer:字符串排列
- for vs foreach
- opencv学习(五)书本《学习Opencv》(中文版)第四章的作业答案第一题(opencv3.0.0+VS2012+win7)
- 分享一个购物车的demo(效果高仿饿了么软件的购物效果)
- 《父与子的编程之旅-与小卡特一起学python》第18章
- java交换两个数的常见方法及效率测试
- HTTPS数字证书原理
- android 获取加载的SD卡路径
- python中str()与repr()的区别
- 代码的设计,