2009-11-23 5 views
3

우리는 약 2 ~ 3 백만 개의 XML 파일이있는 상당히 큰 디스크 배열을 가지고 있습니다. 디스크는 NTFS로 포맷되며 와일드 카드를 사용하여 파일 시스템을 검색하려고합니다. * SomePartOfTheFilename *과 같은 것이 일반적인 검색 쿼리 일 것입니다.NTFS에서 파일 검색

.Net을 사용하고 있는데 DirectoryInfo를 사용하면 속도가 느린 것으로 나타났습니다.

DirectoryInfo directoryInfo = new DirectoryInfo(directory); 

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

루프 및 재귀 사용 또한 매우 느립니다.

NTFS 인덱스를 직접 검색하는 데 사용할 수있는 저급 API 호출이 있습니까?

명령 줄에서 dir * SomePartOfTheFilename */s를 사용하면 거의 즉각적입니다. 레버리지를받을 수있는 것이 있습니까? 당신이 인덱싱 서비스를 사용할 수 있는지

+1

cygwin에서 _find_도 빨리 끝나거나 .net 코드 속도와 비슷합니까? 그렇다면 cmd.exe와 사전 빌드 된 인덱스 사이에 MS와의 통합이 가능할 것입니다. –

+1

인덱싱 서비스 (아래 지적 된) 또는 일부 가정용 추출 솔루션을 사용하여 외부 인덱스를 구축하지 않은 특별한 이유가 있습니까? 파일 시스템을 느리게 검색하는 것뿐만 아니라 디스크 헤드가 경쟁 요청에 대한 서비스를 시도 할 때마다 다른 작업을 느리게 할 수 있습니다. –

+0

우리는 NTFS 인덱스가 충분히 빠르면 파일에 대한 자체 인덱스를 만들지 만 먼저 다른 옵션을 먼저 탐색하려고합니다. – Tim

답변

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 인덱스에 대한 쿼리

+0

하이 스콧 인덱스 서비스가 여기에 적합할지 모르지만 아이디어를 제공해 주셔서 감사합니다. 인덱싱 서비스는 파일 내용뿐만 아니라 파일 이름의 색인을 생성한다고 생각합니다.이 때문에 우리는 엄청난 색인으로 끝날 것입니다. 우리 디스크는 약 500Gb입니다. 우리는 파일 이름 검색에만 관심이 있습니다. 파일 이름 만 색인화하도록 색인 서비스를 구성 할 수 있는지 궁금합니다. -need to look ... – Tim

0

직접 MFT를 사용할 수 있습니다 (NTFS Wiki 참조). 그것은 파일에 대한 모든 정보가있는 데이터 테이블입니다. 예를 들어 here 또는 here과 같은 MFT의 구조를 볼 수 있습니다. Windows API는 동일한 테이블에서 끝나기 때문에 검색 속도가 빨라지므로 검색하기 전에 메모리에 페이지되도록 보장하여 간단한 읽기 (예 : c : \ $ Mft이면 충분) 할 수 있습니다.