-2

目录相当大,大约 2 GB。我已经定义了一个名为 results 的新列表,它将在其中获取所有值。

我的代码在这里:

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);
4

1 回答 1

1

不要使用SelectMany/ ToListReadLines因为它会枚举所有文件行并将巨大的结果存储在内存中。ReadLines您可以使用 a枚举foreach,或手动使用 aStreamReader仅逐行读取。例如,请参阅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));
于 2013-04-04T12:52:51.877 回答