过于宽泛的目录.enumeratefiles () vs多个文件.exists()

本文关键字:文件 exists vs 于宽泛 enumeratefiles | 更新日期: 2023-09-27 18:12:35

我正在更新一个程序,除其他事项外,该程序检查给定路径内是否存在文件。这些文件可以位于主路径之外的许多子目录中的任何一个。以前,我们在整个路径中搜索匹配给定模式的文件,但部分更新是,我们现在有一个单独的数组,其中包含我们期望拥有的文件列表。

给定该数组的存在,我正在考虑两个选项:

  1. Directory.EnumerateFiles(startingPath, pattern, SearchOption.Alldirectories)使用相同的调用,然后根据我的数组(可能通过lambda)检查结果。

  2. 对数组的每个成员使用多个File.Exists()调用

在一般情况下,对于任何给定的调用,我们谈论的是数组中的3个或更少的文件。在高端情况下,我们谈论的仍然是不到12个。大多数执行将涉及数百或数千个调用。

这个程序已经是一个资源大杂王了,所以我一定要用最有效的方法。哪个更有效率?有没有更好的办法?如果将导致改进,可以将文件名的数据结构从数组更改为另一种类型。

过于宽泛的目录.enumeratefiles () vs多个文件.exists()

我会使用第二个方法,对File.Exists的一堆调用,并以并行方式执行。File.Exists的吞吐量成本低,但延迟成本高,因此为了提高速度,您希望它是异步的。

基本思路:

var fileExists = myFilePaths
    .AsParallel()
    .ToDictionary(path => path, path => File.Exists(path));

(当然,尝试第一种方法并进行速度比较是完全合理的-我只是给出我的"最佳猜测"和对第二种方法的评论。)