今天没事对for循环、foreach循环、MoveNext循环,执行效率进行了对比;粗略测试代码如下:

static void Main(string[] args)
{
#region 三种方式循环执行效率测试 List<int> intList = new List<int>();
for (int i = ; i < ; i++)
{
intList.Add(i);
} #region for循环执行时间测试 Stopwatch sw_1 = new Stopwatch();
string excuteTime_1;
int sum1 = ;
sw_1.Start();
for (int i = ; 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 = ;
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 = ;
//using (IEnumerator<int> enumerator = intList.GetEnumerator())//1060
//{
using (var enumerator = intList.GetEnumerator())//
{
//IEnumerator<int> enumerator = intList.GetEnumerator();//1631
//var enumerator = intList.GetEnumerator();//
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循环效率粗比较的更多相关文章

  1. 2019.03.26 读书笔记 关于for与foreach

    for 是索引器,foreach是迭代器 foreach在movenext()中增加了对集合版本(一个整数,每次对集合修改都+1)的验证,另外反编译后的效果是使用了using(是try finally ...

  2. 你可能不知道的陷阱, IEnumerable接口

    1.  IEnumerable 与  IEnumerator IEnumerable枚举器接口的重要性,说一万句话都不过分.几乎所有集合都实现了这个接口,Linq的核心也依赖于这个万能的接口.C语言的 ...

  3. Android复习资料

    转载:http://blog.csdn.net/huachao1001/article/details/53156582 在10月份开始就没有再参与校招了,面试过程真的很累,有时现场等面试一等就是几个 ...

  4. C# IEnumerable,Lambda表达式和 Parallel并行编程的用法

    以前一直主要做C++和C方面的项目,对C#不太了解熟悉,但听说不难,也就一直没有在意学习C#方面的知识.今天有个C#项目,需要做些应用的扩展,同时修改一些bug.但看了C#代码,顿时觉得有些不适应了. ...

  5. php中一些提高性能的技巧

    php中一些提高性能的技巧 tags:php性能 提高性能 php中的@ php的静态 引言:php作为一种脚本语言,本身的性能上肯定是不如c++或者java的.拥有简单易学的特性的同时,性能提升的空 ...

  6. .Net 笔记

    1.介绍 .net一般指.Net Framework框架.一种平台,一种技术. C#是一种编程语言,可以开发基于.net平台的应用. .Net Framework是框架是.Net平台不可缺少的一部分, ...

  7. foreach与正常for循环效率对比

    foreach foreach编译成字节码之后,使用的是迭代器实现的. foreach特点: 无须获取容器大小 需要创建额外的迭代器变量 遍历期间得到的是对象,没有索引位置信息,因此不能进行赋值操作. ...

  8. foreach 和 for 循环的区别

    foreach 依赖 IEnumerable. 第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a, 以后每次再执行 var a in Ge ...

  9. for循环与foreach的区别

    for循环与foreach的区别 foreach 依赖 IEnumerable. 第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a, 以后 ...

随机推荐

  1. 五分钟读懂UML类图

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...

  2. OpenStack中给wsgi程序写单元測试的方法

    在 OpenStack 中, 针对web应用, 有三种方法来写单元測试 1) 使用webob生成模拟的request from __future__ import print_function imp ...

  3. fopen 參数具体解释

    fopen fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path, ...

  4. 关于EventHandler的使用

    也就是委托和事件的使用.使用过,但了解的不够深入,现在逐渐来填以前留下的坑吧. EventHandler, EventHandler<TEventArg> 是.net Framework内 ...

  5. asp.net 追加文本(追加写入记事本)

    代码: string path = Server.MapPath("/Log/Log.txt"); if (File.Exists(path)) { using (StreamWr ...

  6. iOS学习资料整理

    视频教程(英文) 视频 简介 Developing iOS 7 Apps for iPhone and iPad 斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS S ...

  7. unity 打包 windows 运行 紫色 粉红色

    unity下建立了个小demo,在editer里面运行正常.如下 但是一旦打包发布到android或者windows下就出现了类似这种情况 这种一般是由于材质贴图的缺失,一般来说选定的默认贴图的话会打 ...

  8. Jquery列表中的导航菜单的应用

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. python-整理--pip whl命令

    如果要在windows系统上安装新的包,可以下载*.exe安装文件,双击下一步...,如果找不到exe的话. 在CMD中执行 pip install 安装包文件.whl 就可以安装了 pip这个命令本 ...

  10. win 下python2.7 pymssql连接ms sqlserver 2000

    python DB-API 连接mysql 要用到库pymssql 下载请到https://pypi.python.org/pypi/pymssql/2.0.1我这里下载的是ms windows in ...