什么是在Windows NT上读取和解析数百万个文件的最佳方法

时间:2013-09-18 05:44:51

标签: filesystems ntfs

我在一个目录中有数百万个文件(在包含许多子导演的目录中), 这些文件都是小文件。

我认为有两个挑战:

  1. 如何遍历目录以查找所有文件。我试过'FindFirstFile / FindNextFile'方式,但我觉得它太慢了。我应该使用 Windows Change Journal 吗?

  2. 在找到所有文件名后,我需要将整个文件读取到内存中,然后解析它。我应该使用FILE_FLAG_SEQUENTIAL_SCAN标志吗?还是有更有效的方式?

3 个答案:

答案 0 :(得分:0)

一些想法......

我担心的是,如果将文件内容加载到内存中,您将很快耗尽服务器内存。您需要做的是找到有问题的文件,并将结果写入您可以解析和解释的日志或报告。

答案 1 :(得分:0)

NTFS,或者实际上任何非专业文件系统都会因数百万个小文件而变慢。这是数据库的领域。

如果文件实际上很小,那么阅读它们根本不重要。间接成本将占主导地位。使用第二个线程可能是值得的,但第三个线程不太可能进一步帮助。

另外,使用FindFirstFileEx加快搜索速度。您不需要备用文件名,但更喜欢更大的缓冲区。

答案 2 :(得分:0)

您可以使用NtQueryDirectoryFile和大缓冲区(例如64 KB)来查询孩子    此功能是您可以与文件系统进行通信的最快速度的绝对限制。

如果这对您不起作用,您可以直接读取NTFS文件表,但这意味着您必须具有管理权限,并且需要手动实现文件系统阅读器。