在C#/VB.NET/.NET中,forforeach哪个循环运行得更快?

自从我读到for循环比foreach循环快long time ago之后,我就认为它适用于所有集合、通用集合、所有数组等.

我搜索了一下谷歌,找到了一些文章,但大多数都没有定论(阅读文章 comments )和开放性.

理想的做法是列出每个场景,并为相同的场景提供最佳解决方案.

例如(只是一个应该如何的例子):

  1. 用于迭代for0个数组+
  2. 对于迭代IList个(非泛型)字符串-foreach更好

网上有几篇关于这方面的参考文献:

  1. Original grand old article by Emmanuel Schanzer
  2. CodeProject FOREACH Vs. FOR
  3. Blog - To foreach or not to foreach, that is the question
  4. ASP.NET forum - NET 1.1 C# for vs foreach

[编辑]

除了可读性方面,我真的对事实和数字感兴趣.在某些应用中,性能优化的最后一英里至关重要.

推荐答案

Patrick Smacchia blogged about this上个月,得出以下结论:

  • 列表中的for循环比foreach便宜两倍多
  • 在数组上循环大约比在列表上循环便宜2倍.
  • 因此,使用for在数组上循环的成本要低5倍 而不是使用foreach在列表上循环 (我相信,我们都是这样做的).

.net相关问答推荐

尽管有`disable`注释,但未 suppress Pylint语法错误

带有ASP.NET核心的Angular 项目模板.API试验

如何手动注入依赖注入

.NET 中两个子字符串之间的非贪婪正则表达式匹配

在 C# 中,如何使用泛型的基类将泛型接口的所有实例注入到单个构造函数中?

使用 Task.WhenAll 但需要跟踪每个单独的 Task 的成功

无法解析此引用.找不到程序集

为什么 .net 对字符串使用 UTF16 编码,但默认使用 UTF-8 来保存文件?

在 .NET 中获取执行 exe 路径的最佳方法是什么?

.Include() 与 .Load() 在 EntityFramework 中的性能

如何中止任务,如中止线程(Thread.Abort 方法)?

.net 服务总线建议?

C# 属性实际上是方法吗?

如何授予所有用户对我的应用程序创建的文件的完全权限?

.NET 反射的成本是多少?

SQLParameter 如何防止 SQL 注入?

什么是 C# 中的自动属性,它们的用途是什么?

在 .NET 中获取默认打印机的最佳方法是什么

什么是 .NET 应用程序域?

清除文件内容