LINQ를 사용한 고급 파일 읽기
각 줄이 처리할 별도의 요소를 나타내는 두 개의 텍스트 파일이 있다고 가정합니다. 우리의 목표는 C#을 사용하여 이러한 파일을 한 줄씩 읽는 효율적이고 읽기 쉬운 방법을 찾는 것입니다.
현재 접근 방식
현재 StreamReader를 사용하여 각 줄을 개별적으로 읽습니다. . 이 방법은 간단하지만 대용량 파일이나 특정 줄을 선택해야 하는 경우에는 비효율적일 수 있습니다.
LINQ 활용
LINQ는 이 문제를 해결하는 강력한 접근 방식을 제공합니다. 문제:
static IEnumerable<SomeType> ReadFrom(string file) { string line; using(var reader = File.OpenText(file)) { while((line = reader.ReadLine()) != null) { SomeType newRecord = /* parse line */ yield return newRecord; } } }
이 방법은 반복자 블록을 사용하여 지연 줄 판독기를 구현합니다. Yield 키워드를 사용하면 전체 파일을 버퍼링하지 않고 한 번에 하나의 레코드를 반환합니다.
향상된 유연성
메모리 소비 문제를 해결하기 위해 다음을 수정할 수 있습니다. 코드는 약간:
static IEnumerable<string> ReadFrom(string file) { string line; using(var reader = File.OpenText(file)) { while((line = reader.ReadLine()) != null) { yield return line; } } }
이제 이 메서드는 버퍼링 없이 일련의 문자열을 반환합니다. 그런 다음 Where 및 Select와 같은 LINQ 연산자를 사용하여 필요에 따라 행을 필터링하고 처리할 수 있습니다.
... var typedSequence = from line in ReadFrom(path) let record = ParseLine(line) where record.Active // for example select record.Key;
이 코드는 ReadFrom 메서드를 사용하여 지연 평가 시퀀스를 생성하므로, 전체 파일을 메모리에 저장합니다.
결론
LINQ를 활용하면 파일 읽기 코드의 효율성과 가독성을 향상시킵니다. 지연 평가 접근 방식은 불필요한 메모리 소비를 방지하므로 대용량 파일을 처리하거나 특정 줄을 선택하는 데 이상적입니다.
위 내용은 C#에서 큰 텍스트 파일을 읽을 때 LINQ는 어떻게 효율성과 가독성을 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!