通过实验比较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 毫秒。
为什么会这样?让我们更深入一点。
for
循环版本只为两个局部变量(counter 和 i)使用了足够的堆栈空间。而 foreach
版本为四个局部变量(item、AccountList 对象和两个编译器生成的临时对象)使用堆栈空间。
当在 CLR 中调用方法时,局部变量所需的所有内存都分配在堆栈上。由于这是在堆栈上进行的,因此这个过程很快但不是免费的。这就是 foreach
循环由于其额外的两个局部变量而产生少量成本的原因。
等等!!!
还有其他改变效果的东西。
如果我们在for
循环和foreach
循环中多次使用局部变量,看看会发生什么。
结果逆转了。
可见,如果我们必须在 for
循环中多次访问局部变量值,在这种情况下,性能会下降。
结论
foreach
循环速度更快,因为存储数组中元素值的局部变量比访问数组中的元素更快。
如果每次迭代只能访问一次数组,则 for
比 foreach
循环更快。
相关文章
- 站长推荐