MFT的大小Vs MFT的解析
Size of MFT Vs Parsing of MFT
我在一个项目中工作,我必须从驱动器枚举文件名。我尝试了两种方法
- MFT解析和 多线程与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
的多线程不太可能为您提供任何好处。如果您有两个独立的线程在同一个物理磁盘上运行,那么您将产生不必要的磁盘头查找,这意味着需要更多的时间来满足读取,这很可能导致使用FindFirstFile
和FindNextFile
的多线程版本比单线程版本慢。
遍历MFT可能比使用FindFirst/FindNext更快,但代价是要付出相当多的额外工作。而且,除非您对磁盘有一些特殊的了解,否则可能不会有足够快的来证明在较低级别上编写代码的费用是合理的。在一般情况下很可能会变慢。我怀疑NTFS开发人员和编写FindFirstFile/FindNextFile的人对MFT知道一些我们大多数人不知道的事情,包括如何有效地遍历它。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 完美前进使用 std::forward vs RefRefCast
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- consteval wrapper vs. source_location
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- MFT的大小Vs MFT的解析