gpt4 book ai didi

c++ - MFT 的大小与 MFT 的解析

转载 作者:行者123 更新时间:2023-11-28 02:52:22 59 4
gpt4 key购买 nike

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

  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 秒

P.s 从两台独立的机器上进行的测量。

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

最佳答案

FindFirstFile 的多线程不太可能给您带来任何好处。如果您有两个单独的线程在同一个物理磁盘之后运行,那么您将招致不必要的磁盘头寻道,这将意味着需要更多时间来满足读取,这很可能导致使用 FindFirstFileFindNextFile 比单线程版本

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

关于c++ - MFT 的大小与 MFT 的解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22754492/

59 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com