3


0

NTFSでファイルを検索する

約300万から200万のXMLファイルを含むかなり大きなディスクアレイがあります。 ディスクはNTFSでフォーマットされており、ワイルドカードを使用してファイルシステムを検索します。 したがって、* SomePartOfTheFilename *のようなものが一般的な検索クエリになります。

Netを使用していますが、DirectoryInfoの使用が遅いようです。
DirectoryInfo directoryInfo = new DirectoryInfo(directory);

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

ループと再帰の使用も非常に遅いです。

NTFSインデックスを直接検索するために使用できる低レベルのAPIコールはありますか?

コマンドラインからdir * SomePartOfTheFilename * / sを使用すると、ほとんどすぐに実行できます。 そこで活用できるものはありますか?

2 Answer


1


インデックスサービスを使用できるかどうかはわかりませんが、あなたがしようとしていることには便利かもしれません。

コンピューター上のファイルのNTFSインデックスに対して複雑なクエリを作成できます。


1


MFTを直接使用できます(http://en.wikipedia.org/wiki/NTFS[NTFS Wiki]を参照)。 これは、ファイルに関するすべての情報が格納されているデータテーブルです。 たとえば、http://www.ntfs.com/ntfs-mft.htm [here]またはhttp://www.codeproject.com/KB/vb/MftRead.aspx[here]などのMFTの構造を確認できます。 Windows APIは同じテーブルに配置されるため、代わりに検索を高速化して、検索前にメモリ内でページングされることを保証できます(たとえば、 c:\ $ Mftで十分です)。