Directory.EnumerateFiles 与 Directory.GetFiles 之间有什么区别?
Directory.EnumerateFiles
与 GetFiles
之间有什么区别?
显然,一个返回数组,另一个返回 Enumerable。
还要别的吗?
What is the difference between Directory.EnumerateFiles
vs GetFiles
?
Obviously one returns an array and the other return Enumerable.
Anything else?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
来自文档:
所以基本上,
EnumerateFiles
返回一个IEnumerable
,它可以在某种程度上进行延迟计算,而GetFiles
返回一个string[]
,它必须完全填充才能返回。From the docs:
So basically,
EnumerateFiles
returns anIEnumerable
which can be lazily evaluated somewhat, whereasGetFiles
returns astring[]
which has to be fully populated before it can return.EnumerateFiles
返回IEnumerable
这意味着延迟执行。它仅在 .net 4 及更高版本中可用。由于文件系统非常慢(尤其是对于大型文件夹),因此延迟执行对于顺序处理来说是一个真正的好处。取决于许多其他因素。
EnumerateFiles
returnsIEnumerable<string>
and that implies deferred execution. It is only available in .net 4 and up.As the File system is notoriously slow (especially for large folders) the deferred execution can be a real bonus for sequential processing. Depending on lots of other factors.
使用 EnumerateFiles 时,如果您随后使用
.Last
,则所有速度都会下降。这当然是有道理的,因为要到达最后一个文件,需要枚举所有文件,然后获取最后一个文件。但是,使用
.First
或.FirstOrDefault
变得非常快,因为它只是抓取第一个项目并继续前进。When using EnumerateFiles, all speed is lost if you are then using
.Last
. This makes sense of course, because to get to the last file, it will need to enumerate all files, then grab the last one.However, using
.First
or.FirstOrDefault
becomes very fast, because it simply grabs the first item and moves on.