我有一个非常长的文本文件(大约600MB的文本),我想逐行解析。我可以简单地使用StreamReader.ReadLine()
方法,但我想知道使用带有File.ReadLines(filepath)
的LINQ是否会占用大量内存,或者在将行“读取”到单独的字符串变量后将其从内存中删除
换句话说,File.ReadLines()
将在内存中构建整个字符串数组,因为我将浏览文件,或者它将使用相同数量的内存(即单行)与StreamReader.ReadLine()
类似地工作?
答案 0 :(得分:2)
File.ReadLines
实际上是StreamReader.ReadLine()
的包装器,每次迭代将调用一次。它不执行任何自己的缓冲,但StreamReader
将缓冲一小部分以提高性能。
答案 1 :(得分:1)
来自MSDN:
ReadLines和ReadAllLines方法的不同之处如下:使用时 ReadLines,您可以先开始枚举字符串集合 整个系列归还;当你使用ReadAllLines时,你必须 在您可以访问之前等待返回整个字符串数组 数组。因此,当您使用非常大的文件时, ReadLines可以更有效率。
所以看起来ReadLines
一次读取一行。