0

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

鉴于该数组的存在,我正在考虑两种选择:

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

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

在平均情况下,对于任何给定的调用,我们在数组中讨论 3 个或更少的文件。在高端的情况下,我们仍然在谈论不到十几个。大多数处决将涉及数百或数千个调用。

这个程序已经是一个资源消耗者,所以我肯定想在这里使用最有效的方法。哪个更有效率?有没有更好的办法?如果这会带来改进,则可以将文件名的数据结构从数组更改为另一种类型。

4

1 回答 1

0

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

开始的基本思路:

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

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

于 2013-05-08T16:50:45.817 回答