56

我对 File.ReadLines() 和 File.ReadAllLines() 有疑问。它们之间有什么区别。我有文本文件,其中包含按行的数据。File.ReadAllLines()返回数组并使用File.ReadLines().ToArray();我也可以获得相同的结果。那么这些方法是否有任何性能差异?

string[] lines = File.ReadLines("C:\\mytxt.txt").ToArray();

或者

string[] lines = File.ReadAllLines("C:\\mytxt.txt");
4

3 回答 3

77

这些方法是否有任何性能差异?

的,有区别

File.ReadAllLines()方法一次读取整个文件并返回 string[] 数组,因此在处理大文件时需要时间,不推荐用户必须等到整个数组返回。

File.ReadLines()返回一个IEnumerable<string>并且它不会一次读取整个文件,因此在处理大文件时它确实是一个更好的选择。

来自MSDN

ReadLines 和 ReadAllLines 方法的区别如下:

使用 ReadLines 时,可以在返回整个集合之前开始枚举字符串集合;使用 ReadAllLines 时,必须等待返回整个字符串数组才能访问该数组。因此,当您处理非常大的文件时,ReadLines 会更有效率。

示例 1:File.ReadAllLines()

string[] lines = File.ReadAllLines("C:\\mytxt.txt");

示例 2:File.ReadLines()

foreach (var line in File.ReadLines("C:\\mytxt.txt"))
{

   //Do something     

}
于 2014-02-23T15:13:05.457 回答
6

File.ReadLines方法返回IEnumerable<string>。但是File.ReadAllLines返回string[] 如果您阅读大文件,则最好使用File.ReadLines方法。因为它从文件中逐行读取,而不是读取string[]占用大量内存的所有文件。MSDN

于 2014-02-23T15:06:01.583 回答
2

读取所有行

打开一个文本文件,读取文件的所有行,然后关闭文件。

如果您有小文件或必须一次处理整个文件,请使用它,因为它会完全读取文件,这意味着整个文件都在您的内存中。如果文件很大,它可能会降低性能。

读行

使用 File.ReadLines 方法,您可以在返回整个集合之前开始枚举字符串集合。

如果您需要分块处理文件(而不是一次处理整个文件),这很有用。

MSDN中的备注:

ReadLines 和 ReadAllLines 方法的区别如下:

使用 ReadLines 时,可以在返回整个集合之前开始枚举字符串集合;使用 ReadAllLines 时,必须等待返回整个字符串数组才能访问该数组。因此,当您处理非常大的文件时,ReadLines 会更有效率。

这是更多详细信息和比较演示

于 2014-02-23T15:08:08.937 回答