我有关于File.ReadLines()和File.ReadAllLines()的查询。有什么区别
他们。我有文本文件,其中包含行数据。File.ReadAllLines()
返回数组并使用File.ReadLines().ToArray();
我也可以获得相同的结果。那么这些方法是否有任何性能差异?
string[] lines = File.ReadLines("C:\\mytxt.txt").ToArray();
或者
string[] lines = File.ReadAllLines("C:\\mytxt.txt");
答案 0 :(得分:61)
与这些方法有任何性能差异吗?
是存在差异
File.ReadAllLines()
方法一次读取整个文件并返回字符串[]数组,因此在处理大量文件时需要花费时间,因为用户必须等待直到返回整个数组,所以不建议这样做。
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
}
答案 1 :(得分:2)
File.ReadLines
方法返回IEnumerable<string>
。但是File.ReadAllLines
会返回string[]
如果您阅读大文件,最好使用File.ReadLines
方法。因为它从文件中逐行读取,而不是将所有文件读入string[]
,这会占用大量内存。 MSDN
答案 2 :(得分:1)
打开文本文件,读取文件的所有行,然后关闭文件。
如果您有小文件或必须立即处理完整文件,请使用此文件,因为它完全读取文件,这意味着整个文件都在您的内存中。如果文件较大,可能会降低性能。
使用File.ReadLines方法,您可以在返回整个集合之前开始枚举字符串集合。
如果您需要以块(而不是整个文件)处理文件,这将非常有用。
MSDN中所述的备注:
ReadLines和ReadAllLines方法的不同之处如下:
使用ReadLines时,可以在返回整个集合之前开始枚举字符串集合;当您使用ReadAllLines时,必须等待返回整个字符串数组才能访问该数组。因此,当您使用非常大的文件时,ReadLines可以更有效。