File.ReadLines是否缓冲读取行?

时间:2016-02-07 19:42:59

标签: c#

我有一个非常长的文本文件(大约600MB的文本),我想逐行解析。我可以简单地使用StreamReader.ReadLine()方法,但我想知道使用带有File.ReadLines(filepath)的LINQ是否会占用大量内存,或者在将行“读取”到单独的字符串变量后将其从内存中删除

换句话说,File.ReadLines()将在内存中构建整个字符串数组,因为我将浏览文件,或者它将使用相同数量的内存(即单行)与StreamReader.ReadLine()类似地工作?

2 个答案:

答案 0 :(得分:2)

File.ReadLines实际上是StreamReader.ReadLine()的包装器,每次迭代将调用一次。它不执行任何自己的缓冲,但StreamReader将缓冲一小部分以提高性能。

答案 1 :(得分:1)

来自MSDN:

  

ReadLines和ReadAllLines方法的不同之处如下:使用时   ReadLines,您可以先开始枚举字符串集合   整个系列归还;当你使用ReadAllLines时,你必须   在您可以访问之前等待返回整个字符串数组   数组。因此,当您使用非常大的文件时,   ReadLines可以更有效率。

所以看起来ReadLines一次读取一行。