目录相当大,大约2 GB。我已经定义了一个名为results的新List,它将获取所有值。
我的代码在这里:
IEnumerable<string> textLines =
Directory.GetFiles(@C:\Users\karansha\Desktop\watson_query\, "*.*")
.Select(filePath => File.ReadLines(filePath))
.SelectMany(line => line)
.Where(line => !line.Contains("appGUID: wx"))
.ToList();
string searchKeyword = "WX Edit Bug";
List<string> results = new List<string>();
textLines.ToList().ForEach(textLine =>
{
if (textLine.Contains(searchKeyword))
{
results.Add(textLine);
}
});
int WX_Edit = results.Count;
Console.WriteLine("WX_Edit_Api=" + WX_Edit);
答案 0 :(得分:1)
不要将SelectMany
/ ToList
与ReadLines
一起使用,因为它会枚举所有文件行并将巨大的结果存储在内存中。您可以使用ReadLines
枚举foreach
,或手动使用StreamReader
来逐行阅读。例如,请参阅http://msdn.microsoft.com/en-us/library/aa287535(v=vs.71).aspx。
此外,如果仅计数相关,请使用递增的int
值,并避免将结果存储在List<string>
中。
尝试使用:
string searchKeyword = "WX Edit Bug";
int WX_Edit = Directory.GetFiles(@C:\Users\karansha\Desktop\watson_query\, "*.*")
.Select(filePath => File.ReadLines(filePath))
.SelectMany(line => line)
.Count(line => !line.Contains("appGUID: wx") && line.Contains(searchKeyword));