Directory.EnumerateFiles
和 GetFiles
有什么区别?
显然一个返回数组,另一个返回 Enumerable。
还有什么吗?
来自文档:
EnumerateFiles 和 GetFiles 方法的区别如下: 当您使用 EnumerateFiles 时,您可以在返回整个集合之前开始枚举名称集合;当您使用 GetFiles 时,必须等待返回整个名称数组才能访问该数组。因此,当您处理许多文件和目录时,EnumerateFiles 会更加高效。
所以基本上,
EnumerateFiles
返回一个IEnumerable
,可以稍微延迟计算,而GetFiles
返回一个string[]
,必须在返回之前完全填充。
EnumerateFiles
返回 IEnumerable<string>
,这意味着延迟执行。它从 .NET Framework 4.0 开始可用。
由于文件系统非常慢(特别是对于大文件夹),延迟执行对于顺序处理来说是一个真正的好处。取决于许多其他因素。
使用 EnumerateFiles 时,如果您随后使用
.Last
,所有速度都会丢失。这当然是有道理的,因为要到达最后一个文件,需要枚举所有文件,然后获取最后一个文件。
但是,使用
.First
或 .FirstOrDefault
变得非常快,因为它只是抓住第一个项目并继续前进。