3

我们有一个相当大的磁盘阵列,上面大约有​​ 2-3 百万个 XML 文件。磁盘使用 NTFS 格式化,我们想使用通配符搜索文件系统。所以像 * SomePartOfTheFilename * 这样的东西将是一个典型的搜索查询。

我们正在使用 .Net 并且发现使用 DirectoryInfo 似乎很慢。

DirectoryInfo directoryInfo = new DirectoryInfo(directory);

List<FileInfo> fileInfos = directoryInfo.GetFiles(searchString, SearchOption.AllDirectories).ToList();

使用循环和递归也很慢。

是否有可以用来直接搜索 NTFS 索引的较低级别的 API 调用?

从命令行使用 dir * SomePartOfTheFilename * /s 几乎是即时的。有什么可以利用的吗?

4

2 回答 2

1

您可以直接使用 MFT(参见:NTFS Wiki)。那是有关文件的所有信息所在的数据表。例如,您可以在此处此处查看 MFT 的结构。Windows API 最终位于同一个表中,因此您也可以尝试加快搜索速度,以保证在搜索之前将其在内存中分页(例如 c:\$Mft 的简单读取就足够了)。

于 2012-01-02T09:12:00.153 回答
1

我不确定您是否可以使用索引服务,但它可能对您尝试做的事情很方便:

http://msdn.microsoft.com/en-us/library/ee805985%28VS.85%29.aspx

http://www.codeproject.com/KB/database/Indexing_Service_HOW-TO.aspx

它允许您针对计算机上文件的 NTFS 索引创建复杂的查询。

于 2009-11-23T18:48:18.083 回答