0

我在一个项目中工作,我必须从驱动器中枚举文件名。我尝试了两种方法

  1. MFT解析和
  2. FindFirstFile 的多线程。我比较了两种实现的执行时间,它显示 MFT 大小越小,执行速度越快,如果 MFT 大小超过 GB,则执行时间越长。

我的观察是:

  • 卷 C:MFT 大小:1.85 GB exe 时间:65 秒核心线程数:9 秒
  • 卷 D:MFT 大小:38 MB exe 时间:0.593 秒核心线程数量:1 秒
  • 卷 C:MFT 大小:1.02 GB exe 时间:11 秒核心线程数:3 秒
  • 卷 D:MFT 大小:89.75 MB exe 时间:1 秒核心线程数量:2 秒

Ps 从两台单独的机器上进行的测量。

有了这些观察,我有点困惑 MFT 的解析是否取决于它的大小?为什么线程不能为更小尺寸的 MFT 提供更好的解决方案?

4

1 回答 1

2

多线程FindFirstFile不太可能为您提供任何好处。如果您有两个单独的线程在同一个物理磁盘上运行,那么您将产生不必要的磁盘磁头寻道,这将意味着更多时间来满足读取,这很可能导致多线程版本使用FindFirstFile并且FindNextFile比单线程版本。

走 MFT 可能比使用 FindFirst/FindNext 更快,但代价是相当多的额外工作。而且,除非您对磁盘有一些特殊的了解,否则可能无法更快证明编写代码以在较低级别工作的费用是合理的。在一般情况下很可能会更慢。我怀疑 NTFS 开发人员和编写 FindFirstFile / FindNextFile 的人知道我们大多数人不知道的关于 MFT 的一两件事,包括如何有效地遍历它。

于 2014-04-02T19:45:26.920 回答