我们有一个相当大的磁盘阵列,其上有大约2-3百万个XML文件。磁盘使用NTFS格式化,我们希望使用通配符搜索文件系统。所以像* SomePartOfTheFilename *就是一个典型的搜索查询。在NTFS中搜索文件
我们使用.Net,并发现使用DirectoryInfo似乎很慢。
DirectoryInfo directoryInfo = new DirectoryInfo(directory);
List<FileInfo> fileInfos = directoryInfo.GetFiles(searchString, SearchOption.AllDirectories).ToList();
使用循环和递归也很慢。
是否有较低级别的API调用可用于直接搜索NTFS索引?
从命令行使用dir * SomePartOfTheFilename */s几乎是即时的。有什么可以利用的吗?
cygwin中的_find_是否也能很快完成,还是与您的.net代码速度相似?如果是这样,那么它可能是cmd.exe和预建索引之间的一些超级秘密MS集成。 – 2009-11-23 18:48:23
是否有任何特别的原因,你没有建立一个外部索引,或者使用索引服务(如下所示)或一些家庭酿造解决方案?不仅是为你搜索一个文件系统缓慢,而且你有机会放慢其他人正在做的工作,如果磁盘头最终会围绕试图处理竞争请求而发生颠簸...... – 2009-11-24 08:22:43
我们希望依靠NTFS索引足够快,我们可以创建我们自己的文件索引,但首先想要探索其他选项。 – Tim 2009-11-24 10:56:02