텍스트 파일을 검색하는 프로그램을 작성 중입니다. 각 파일에는 특정 문자열이 있습니다. 목표는 해당 문자열 이후의 모든 것을 무시하는 것입니다. 내 현재 코드는 전체 텍스트 파일을 읽고 용어가 발견 된 결과 파일 이름의 Enumerable을 반환합니다.
var searchResults = files.Where(file => File.ReadAllText(file.FullName).Contains(searchTerm)).Select(file => file.FullName);
특정 문자열 뒤에있는 모든 줄을 무시하고 통합 할 수 있습니까? 수천 개의 파일이 있으므로 성능이 중요합니다.
쿼리를 다음과 같이 변경할 수 있습니다.
var searchResults = files.Where(file => File.ReadLines(file.FullName).Any(line => line.Contains(searchTerm))
.Select(file => file.FullName));
File.ReadAllText
사용 File.ReadLines
하는 대신 느리게 평가되고 조건이 충족되면 읽기를 중지해야하는 것을 사용할 수 있습니다 .
https://msdn.microsoft.com/en-us/library/vstudio/dd383503(v=vs.100).aspx
속도를 높이기 위해 Parallel LINQ를 사용할 수도 있습니다.
var searchResults = files.AsParallel()
.Where(file => File.ReadLines(file.FullName).Any(line => line.Contains(searchTerm))
.Select(file => file.FullName));
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다