当前位置:  开发笔记 > 编程语言 > 正文

C#中IEnumerable类的foreach和for循环之间的区别

如何解决《C#中IEnumerable类的foreach和for循环之间的区别》经验,为你挑选了3个好方法。

有人告诉我,以下代码块之间存在性能差异.

foreach (Entity e in entityList)
{
 ....
}

for (int i=0; i

哪里

List entityList;

我不是CLR期望,但从我可以告诉他们应该归结为基本相同的代码.有没有人有这样或那样的混凝土(哎呀,我拿着装满污垢)的证据?



1> Daniel Jenni..:

foreach创建一个枚举器的实例(从GetEnumerator返回),该枚举器在整个foreach循环过程中也保持状态.然后,它反复调用枚举器上的Next()对象,并为它返回的每个对象运行代码.

它们不会以任何方式归结为相同的代码,真的,如果您编写自己的枚举器,您会看到它们.



2> David Basara..:

这是一篇很好的文章,显示了两个循环之间的IL差异.

Foreach在技术上较慢,但更容易使用和更容易阅读.除非性能至关重要,否则我更喜欢fore循环而不是for循环.



3> 小智..:

foreach示例大致对应于此代码:

using(IEnumerator e = entityList.GetEnumerator()) {
    while(e.MoveNext()) {
        Entity entity = e.Current;
        ...
    }
}

这里有两个成本,常规for循环不需要支付:

    通过entityList.GetEnumerator()分配枚举器对象的成本.

    两个虚方法的成本调用(MoveNext和Current)列表的每个元素.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有