Directory.EnumerateFiles 与 Directory.GetFiles 有什么区别?

问题描述 投票:0回答:3

Directory.EnumerateFiles
GetFiles
有什么区别?

显然一个返回数组,另一个返回 Enumerable。

还有什么吗?

c# .net directory io
3个回答
201
投票

来自文档

EnumerateFiles 和 GetFiles 方法的区别如下: 当您使用 EnumerateFiles 时,您可以在返回整个集合之前开始枚举名称集合;当您使用 GetFiles 时,必须等待返回整个名称数组才能访问该数组。因此,当您处理许多文件和目录时,EnumerateFiles 会更加高效。

所以基本上,

EnumerateFiles
返回一个
IEnumerable
,可以稍微延迟计算,而
GetFiles
返回一个
string[]
,必须在返回之前完全填充。


38
投票

EnumerateFiles
返回
IEnumerable<string>
,这意味着延迟执行。它从 .NET Framework 4.0 开始可用。

由于文件系统非常慢(特别是对于大文件夹),延迟执行对于顺序处理来说是一个真正的好处。取决于许多其他因素。


20
投票

使用 EnumerateFiles 时,如果您随后使用

.Last
,所有速度都会丢失。这当然是有道理的,因为要到达最后一个文件,需要枚举所有文件,然后获取最后一个文件。

但是,使用

.First
.FirstOrDefault
变得非常快,因为它只是抓住第一个项目并继续前进。

© www.soinside.com 2019 - 2024. All rights reserved.