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)
是否有可能在该特定字符串之后合并忽略所有行?性能非常重要,因为有数千个文件.
您可以将查询更改为:
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)
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |