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