在文本文件中搜索,直到特定字符串

dro*_*ing 4 c# linq performance

我正在编写一个程序来搜索文本文件,每个文件都有一个特定的字符串.目标是忽略该字符串后的所有内容.我当前的代码读取整个文本文件并返回一个Enumerable结果文件名,其中找到了一个术语.

var searchResults = files.Where(file => File.ReadAllText(file.FullName).Contains(searchTerm)).Select(file => file.FullName);
Run Code Online (Sandbox Code Playgroud)

是否有可能在该特定字符串之后合并忽略所有行?性能非常重要,因为有数千个文件.

w.b*_*w.b 7

您可以将查询更改为:

var searchResults = files.Where(file => File.ReadLines(file.FullName).Any(line => line.Contains(searchTerm))
                         .Select(file => file.FullName));
Run Code Online (Sandbox Code Playgroud)

而不是使用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));
Run Code Online (Sandbox Code Playgroud)