首页 / 知识
关于性能:C#中IEnumerable类的foreach和for循环之间的区别
2023-04-14 05:34:00

Difference between foreach and for loops over an IEnumerable class in C#我被告知以下代码块之间存在性能差异。
和
号 在哪里?
我不是clr所期望的,但从我所能知道的来看,它们应该归结为基本上相同的代码。有没有人有确凿的证据(见鬼,我会拿包装好的泥土)来证明? foreach创建枚举器的实例(从getEnumerator返回),该枚举器在foreach循环的整个过程中也保持状态。然后它反复调用枚举器上的next()对象,并为它返回的每个对象运行代码。 它们不会以任何方式归结为相同的代码,实际上,如果编写自己的枚举器,您会看到这一点。 这是一篇很好的文章,展示了两个循环之间的IL差异。 foreach在技术上速度较慢,但更易于使用和阅读。除非性能至关重要,否则我更喜欢foreach循环而不是for循环。 foreach示例大致对应于以下代码:
号 这里有两个费用,一个普通的for循环不需要支付: 这里漏了一点:列表有一个Count属性,它在内部跟踪其中有多少元素。 IEnumerable没有。 如果您编程到接口IEnumerable并使用Count扩展方法,它将枚举以计数元素。 但这是一个无意义的点,因为在IEnumerable中不能按索引引用项。 因此,如果您想锁定到列表和数组中,您可以获得较小的性能提升。 如果你想灵活使用foreach和程序到ienumerable。(允许使用LINQ和/或产量返回)。 在分配方面,最好看一下这个blogpost。它精确地显示了在什么情况下在堆上分配枚举器。
我认为一种可能的情况是,如果可枚举类型的大小和循环条件为常量,则可能获得性能提升;例如:
在这种情况下,根据循环体的复杂性,编译器可能能够用内联调用替换循环。我不知道.NET编译器是否会这样做,如果可枚举类型的大小是动态的,那么它的实用程序是有限的。 就我个人而言,我通常不担心它,在我需要所有项目的任何时候使用 |
最新内容
相关内容
linux循环复制命令?
linux循环复制命令?,系统,文件,命令,目录,地址,源文件,文件夹,目标,文件名,路径,linux下怎么把一个文件复制到多个文件夹里可以使用cp命令来实linux解压命令的区别?
linux解压命令的区别?,系统,工具,电脑,命令,文件,资料,平台,档案,名称,文件夹,Linux学习心得[压缩与解压缩命令]1、常用就是tar命令了。参数为linux命令和程序区别?
linux命令和程序区别?,系统,标准,环境,情况,控制权,服务,软件,信息,命令,文件,linux的命令是应用程序吗1、shell是一个用C语言编写的程序,它是linux命令中和区别?
linux命令中和区别?,系统,认证,电脑,网址,标准,工作,工具,位置,命令,文件,了解下,linux中和/的区别\是反斜杠,/是斜杠。windows下的目录下分隔linux中和命令的区别?
linux中和命令的区别?,系统,网络,软件,标准,命令,控制权,基础,平台,代码,投入,linux中内部命令和外部命令有何区别?区别:内部命令在系统启动时linux命令行写循环?
linux命令行写循环?,工作,系统,地址,命令,情况,定期,基础,连续,信息,文件,Linux常用基本命令大全介绍linux常用命令:pwd命令该命令的英文解释为linux循环命令脚本?
linux循环命令脚本?,代码,系统,增长,工具,官网,项目,流程,数据,数字,底部,linux脚本,在一个循环中赋值一个数组1、通过数组遍历,逐个赋值。定义linux跳出死循环命令?
linux跳出死循环命令?,系统,地址,数字,代码,官方网站,网络,工作,工具,信息,软件,Linux终止前台进程的命令1、方法在“Terminal”终端输入“gnolinux性能测试命令?
linux性能测试命令?,数据,系统,工具,标准,设备,地址,情况,基础,网络,环境,如何排除linux系统的读写缓存进行磁盘性能测试chkdsk。chkdsk的全称linux循环语句命令?
linux循环语句命令?,地方,增长,数字,语句,流程,名称,工具,代码,数据,条件,Linux入门系列——awk命令详解1、其中command是真正的awk命令,-F表示dolinux循环命令?
dolinux循环命令?,系统,工具,时间,信息,增长,代码,对比,数字,官网,定期,如何在linux命令行中循环执行命令1、输入命令按下enter键就会开始执行linux关机命令区别?
linux关机命令区别?,系统,工作,命令,信息,用户,进程,方式,方法,终端,区别,linux关机命令shutdown命令 shutdown命令用于安全关闭Linux系统。执