MFT的大小Vs MFT的解析

Size of MFT Vs Parsing of MFT

本文关键字:MFT Vs      更新时间:2023-10-16

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

  1. MFT解析和
  2. 多线程与FindFirstFile。我比较了两种实现的执行时间,结果显示MFT大小越小,执行速度越快,如果MFT大小超过1 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秒
  • Volume D:MFT大小:89.75 MB exe时间:1秒核心线程数量:2秒

p。s由两台不同的机器测量。

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

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

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