在 Windows 中使用 .NET 获取目录(包括其子目录)中包含的文件数量的最快方法是什么?

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

我有一个包含子目录的目录,每个子目录都包含大量文件。每个这样的目录在其子目录中至少包含 100k 总文件,其中 ecah 子目录每个直接包含大约 150 个文件。我想显示目录中的文件总数,包括其所有子目录的文件计数。虽然我可以通过使用

System.IO
中的 .NET API 来完成此操作,但还有更好的方法吗?

c# .net windows directory subdirectory
1个回答
0
投票

仅使用 .NET 的标准库,最快的选择是

int count = Directory.EnumerateFiles(...).Count();

这比通过

foreach
循环获取文件本身要快,因为我们没有检索并构建正在迭代的文件信息对象。不过,这并不是故事的结局。

还有其他帖子询问如何快速列出目录和子目录,通过研究,我在 这个存储库(很快就会有 NuGet 包)中提出了更快的实现。

300k 文件分布在 300 个子目录中的示例:

方法 意思是 比率 已分配 分配比例
获取文件计数 111.1 毫秒 0.95 99.25 KB 0.004
目录_枚举文件 116.6 毫秒 1.00 25741.13 KB 1.000

通过在调用 Windows API 时重用相同的结构,并且仅分配计算要迭代的子目录的路径所需的字符串,可以避免分配。

对于上面的例子,我们似乎已经遇到了 API/IO 瓶颈,因此可能几乎无法改进。不过,主要影响是分配减少,这对于更密集和更紧凑的目录来说是巨大的。

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