技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

通过实验比较C# for与foreach循环速度的快慢

作者:admin    时间:2023-6-7 13:53:1    浏览:

我做了一个小实验来证明 for 循环 与 foreach 循环速度快慢的观点。

我在 SQL Server 数据库中有一个名为 accounts 的表,我在该表中添加了 20,000 行,其中包含 9 列,每条记录大约有 1 KB 的数据。加载到我的业务层后,我将其转换回 DTO 并返回到我的 Web 服务。只是为了测试性能,我添加了两个性能计数器——一个用于foreach循环,一个用于for循环。结果很明显。foreach 循环执行相同的过程需要 107 毫秒,而经典的 for 循环需要 14 毫秒。

 C# 代码性能 - for 循环 VS foreach 循环

为什么会这样?让我们更深入一点。

for 循环版本只为两个局部变量(counteri)使用了足够的堆栈空间。而 foreach 版本为四个局部变量(itemAccountList 对象和两个编译器生成的临时对象)使用堆栈空间。

当在 CLR 中调用方法时,局部变量所需的所有内存都分配在堆栈上。由于这是在堆栈上进行的,因此这个过程很快但不是免费的。这就是 foreach 循环由于其额外的两个局部变量而产生少量成本的原因。

等等!!!

还有其他改变效果的东西。

如果我们在for循环和foreach循环中多次使用局部变量,看看会发生什么。

 for和foreach循环中多次使用局部变量

结果逆转了。

可见,如果我们必须在 for 循环中多次访问局部变量值,在这种情况下,性能会下降。

结论

foreach 循环速度更快,因为存储数组中元素值的局部变量比访问数组中的元素更快。

如果每次迭代只能访问一次数组,则 forforeach 循环更快。

相关文章

标签: CSharp  c-sharp循环  for  foreach  
x
  • 站长推荐
/* 左侧显示文章内容目录 */