首页 > 代码库 > for、foreach和MoveNext循环效率粗比较
for、foreach和MoveNext循环效率粗比较
今天没事对for循环、foreach循环、MoveNext循环,执行效率进行了对比;粗略测试代码如下:
static void Main(string[] args) { #region 三种方式循环执行效率测试 List<int> intList = new List<int>(); for (int i = 0; i < 100000000; i++) { intList.Add(i); } #region for循环执行时间测试 Stopwatch sw_1 = new Stopwatch(); string excuteTime_1; int sum1 = 0; sw_1.Start(); for (int i = 0; i < intList.Count; i++) { sum1 += intList[i]; } sw_1.Stop(); excuteTime_1 = sw_1.ElapsedMilliseconds.ToString(); #endregion #region foreach循环执行时间测试 Stopwatch sw_2 = new Stopwatch(); int sum2 = 0; string excuteTime_2; sw_2.Start(); foreach (var item in intList) { sum2 += item; } sw_2.Stop(); excuteTime_2 = sw_2.ElapsedMilliseconds.ToString(); #endregion #region enumerator.MoveNext循环执行时间 Stopwatch sw_3 = new Stopwatch(); string excuteTime_3; int sum3 = 0; //using (IEnumerator<int> enumerator = intList.GetEnumerator())//1060 //{ using (var enumerator = intList.GetEnumerator())//630 { //IEnumerator<int> enumerator = intList.GetEnumerator();//1631 //var enumerator = intList.GetEnumerator();//976 sw_3.Start(); while (enumerator.MoveNext()) { sum3 += enumerator.Current; } sw_3.Stop(); excuteTime_3 = sw_3.ElapsedMilliseconds.ToString(); } #endregion Console.WriteLine("for循环执行时间:" + excuteTime_1); Console.WriteLine("foreach循环执行时间:" + excuteTime_2); Console.WriteLine("movenext循环执行时间:" + excuteTime_3); /* * 1)、通过以上对for循环、foreach循环和Enumerator.MoveNext()方式循环的测试,显示执行效率由高到低依次为:MoveNext>foreach>for。 * 2)、上面的结论前提是在获取IEnumerator<T>时,用弱类型var,而不是强类型IEnumrator<int>); * 3)、如果变量用强类型,MoveNext的效率显著下降,比foreach低,甚至比for循环效率还低。 */ #endregion #region Queue队列测试 QueueClass.QueueFun_1(); #endregion QueueClass queueClass = new QueueClass(); Console.ReadKey(); }
最后又一点比较奇怪,
IEnumerator<int> enumerator = intList.GetEnumerator()
var enumerator = intList.GetEnumerator()
强类型的执行效率比弱类型的执行效率低,而且低了不少。有哪位大侠知道其中缘故,还请不吝赐教,先谢过。
for、foreach和MoveNext循环效率粗比较
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。