我正在编写一个应该处理许多小文件的程序,比如数千甚至数百万。我一直在用 500k 文件测试该部分,第一步只是迭代一个目录,其中包含大约 45k 目录(包括子目录的子目录等)和 500k 小文件。遍历所有目录和文件,包括获取文件大小和计算总大小大约需要 6 秒。现在,如果我尝试在遍历时打开每个文件并立即关闭它,它看起来就像它永远不会停止。事实上,它需要的时间太长(几个小时......)。由于我在 Windows 上执行此操作,因此我尝试使用 CreateFileW、_wfopen 和 _wopen 打开文件。我没有在文件上读取或写入任何内容,尽管在最终实现中我只需要读取。但是,我在任何尝试中都没有看到明显的改进。
我想知道是否有更有效的方法来使用任何可用函数打开文件,无论是 C、C++ 还是 Windows API,或者唯一更有效的方法是直接读取 MFT 并读取磁盘块,我我想避免吗?
更新:我正在处理的应用程序正在使用版本控制进行备份快照。因此,它也有增量备份。500k 文件的测试是在一个巨大的源代码存储库上完成的,以便进行版本控制,类似于 scm。因此,所有文件都不在一个目录中。也有大约 45k 目录(如上所述)。
因此,压缩文件的建议解决方案无济于事,因为备份完成后,即会访问所有文件。因此,我不会从中受益,甚至会产生一些性能成本。