我在一个目录中有数百万个文件(在包含许多子导演的目录中), 这些文件都是小文件。
我认为有两个挑战:
如何遍历目录以查找所有文件。我试过'FindFirstFile / FindNextFile'方式,但我觉得它太慢了。我应该使用 Windows Change Journal 吗?
在找到所有文件名后,我需要将整个文件读取到内存中,然后解析它。我应该使用FILE_FLAG_SEQUENTIAL_SCAN标志吗?还是有更有效的方式?
答案 0 :(得分:0)
一些想法......
我担心的是,如果将文件内容加载到内存中,您将很快耗尽服务器内存。您需要做的是找到有问题的文件,并将结果写入您可以解析和解释的日志或报告。
答案 1 :(得分:0)
NTFS,或者实际上任何非专业文件系统都会因数百万个小文件而变慢。这是数据库的领域。
如果文件实际上很小,那么阅读它们根本不重要。间接成本将占主导地位。使用第二个线程可能是值得的,但第三个线程不太可能进一步帮助。
另外,使用FindFirstFileEx
加快搜索速度。您不需要备用文件名,但更喜欢更大的缓冲区。
答案 2 :(得分:0)
您可以使用NtQueryDirectoryFile
和大缓冲区(例如64 KB)来查询孩子
此功能是您可以与文件系统进行通信的最快速度的绝对限制。
如果这对您不起作用,您可以直接读取NTFS文件表,但这意味着您必须具有管理权限,并且需要手动实现文件系统阅读器。