在C#/ VB.NET/.NET中,哪个循环运行得更快,for或者foreach?
自从我读了一个for循环工程快于foreach环路很久以前我以为这对所有集合,泛型集合,所有阵列,等真正站在
我搜索谷歌并发现了一些文章,但其中大多数都没有结果(阅读文章的评论)和开放式.
什么是理想的是列出每个场景和相同的最佳解决方案.
例如(只是它应该如何的一个例子):
for比...更好foreachIList(非泛型)字符串 - foreach比...更好for在网上找到的一些参考文献:
foreach或不是foreach,这就是问题forvsforeach
[编辑]
除了可读性方面,我对事实和数据非常感兴趣.有些应用程序的最后一英里性能优化受到挤压很重要.
public Int64 ReturnDifferenceA()
{
User[] arrayList;
Int64 firstTicks;
IList<User> userList;
Int64 secondTicks;
System.Diagnostics.Stopwatch watch;
userList = Enumerable
.Range(0, 1000)
.Select(currentItem => new User()).ToList();
arrayList = userList.ToArray();
watch = new Stopwatch();
watch.Start();
for (Int32 loopCounter = 0; loopCounter < arrayList.Count(); loopCounter++)
{
DoThings(arrayList[loopCounter]);
}
watch.Stop();
firstTicks = watch.ElapsedTicks;
watch.Reset();
watch.Start();
for (Int32 loopCounter = 0; loopCounter < arrayList.Count(); loopCounter++)
{
DoThings(arrayList[loopCounter]);
}
watch.Stop();
secondTicks = watch.ElapsedTicks;
return firstTicks - secondTicks;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这非常简单.创建用户列表,强制使用数组,启动监视,循环列表并调用方法,停止监视.重复.通过返回第一次运行和第二次运行的差异来完成.
现在我打电话给这些:
differenceList = Enumerable
.Range(0, 50)
.Select(currentItem => ReturnDifferenceA()).ToList(); …Run Code Online (Sandbox Code Playgroud)