3

約 200 万から 300 万の 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

Indexing サービスを使用できるかどうかはわかりませんが、やろうとしていることには便利かもしれません。

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 に答える
1

MFT を直接使用することもできます (参照: NTFS Wiki )。これは、ファイルに関するすべての情報が配置されているデータ テーブルです。たとえば、ここまたはここで MFT の構造を確認できます。Windows API は同じテーブルで終了するため、代わりに検索を高速化して、検索の前にメモリ内でページングされることを保証することができます (たとえば、c:\$Mft の単純な読み取りで十分です)。

于 2012-01-02T09:12:00.153 に答える