定义List时未处理System.IO.out of memory异常

本文关键字:out of memory 异常 IO System List 未处理 定义 | 更新日期: 2023-09-27 18:07:28

目录相当大,大约2gb。我已经定义了一个名为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);

定义List时未处理System.IO.out of memory异常

不要将SelectMany/ToListReadLines一起使用,因为它会枚举文件的所有行并将巨大的结果存储在内存中。您可以使用foreach枚举ReadLines,或者手动使用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));