for、foreach和MoveNext循环效率粗比较
今天没事对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循环效率粗比较的更多相关文章
- 2019.03.26 读书笔记 关于for与foreach
for 是索引器,foreach是迭代器 foreach在movenext()中增加了对集合版本(一个整数,每次对集合修改都+1)的验证,另外反编译后的效果是使用了using(是try finally ...
- 你可能不知道的陷阱, IEnumerable接口
1. IEnumerable 与 IEnumerator IEnumerable枚举器接口的重要性,说一万句话都不过分.几乎所有集合都实现了这个接口,Linq的核心也依赖于这个万能的接口.C语言的 ...
- Android复习资料
转载:http://blog.csdn.net/huachao1001/article/details/53156582 在10月份开始就没有再参与校招了,面试过程真的很累,有时现场等面试一等就是几个 ...
- C# IEnumerable,Lambda表达式和 Parallel并行编程的用法
以前一直主要做C++和C方面的项目,对C#不太了解熟悉,但听说不难,也就一直没有在意学习C#方面的知识.今天有个C#项目,需要做些应用的扩展,同时修改一些bug.但看了C#代码,顿时觉得有些不适应了. ...
- php中一些提高性能的技巧
php中一些提高性能的技巧 tags:php性能 提高性能 php中的@ php的静态 引言:php作为一种脚本语言,本身的性能上肯定是不如c++或者java的.拥有简单易学的特性的同时,性能提升的空 ...
- .Net 笔记
1.介绍 .net一般指.Net Framework框架.一种平台,一种技术. C#是一种编程语言,可以开发基于.net平台的应用. .Net Framework是框架是.Net平台不可缺少的一部分, ...
- foreach与正常for循环效率对比
foreach foreach编译成字节码之后,使用的是迭代器实现的. foreach特点: 无须获取容器大小 需要创建额外的迭代器变量 遍历期间得到的是对象,没有索引位置信息,因此不能进行赋值操作. ...
- foreach 和 for 循环的区别
foreach 依赖 IEnumerable. 第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a, 以后每次再执行 var a in Ge ...
- for循环与foreach的区别
for循环与foreach的区别 foreach 依赖 IEnumerable. 第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a, 以后 ...
随机推荐
- 2D和3D空间中计算两点之间的距离
自己在做游戏的忘记了Unity帮我们提供计算两点之间的距离,在百度搜索了下. 原来有一个公式自己就写了一个方法O(∩_∩)O~,到僵尸到达某一个点之后就向另一个奔跑过去 /// <summary ...
- C#实现下载功能,可用于软件自动更新
以前在百度写的文档,转移到此处 软件截图: 代码下载: http://twzy.ys168.com/ 在代码下载文件夹中 //代码: using System; using System.Comp ...
- 安卓Menu键的问题
近期开发中有须要Menu键,结果发现了一个非常尴尬的问题.我的測试机上有Menu键.可是測试平板上没有,队友的測试机上竟然也没有Menu键.这着实有些尴尬... 上网谷歌之后才发现问题所在: 仅仅有在 ...
- 曾经很长时间不会写的两个SQL语句(group by,having)
1.统计各部门的平均工资,平均资金(要求同时显示出部门名称,部门编号,部门总人数) SQL)),) 部门平均工资,)),) 部门平均资金 FROM EMP E RIGHT JOIN DEPT D ON ...
- ASP.NET导入Excel到SQL数据库
protected void btnChange_Click(object sender, EventArgs e) { UserInfoClass tClass = (UserInfoClass)S ...
- codeforces 339C Xenia and Bit Operations(线段树水题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Xenia and Bit Operations Xenia the beginn ...
- Hibernate之通过hibernate.cfg.xml配置文件访问数据库的例子
hibernate.cfg.xml文件内容: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
- Bootstrap3 formテキストフィールド横幅の指定の仕方
Bootstrap3を使ってて.フォームの横幅を変えたいなって時ありませんか??Bootstrap3のフォームの横幅のデフォルトはwidth:100%で設定されています.ですので.普通にフォームを使用 ...
- 摆方块(贪心)P1087
描述 给你一个n*n的方格,每个方格里的数必须连续摆放如 1 2 4 3 ,下图为不连续的,请输出从左上角到右下角的对角线上的最大和 1 2 3 4 输入 ...
- javaweb jsp页面上传excel文件
servlet: private static final long FILE_MAX_SIZE = 4 * 1024 * 1024; if (!ServletFileUpload.isMultipa ...