我有关于File的查询。ReadLines()和File。ReadAllLines()他们我有一个文本文件,其中包含按行排列的数据。File.ReadAllLines()
返回数组,使用File.ReadLines().ToArray();
也可以得到相同的结果。那么,这些方法是否存在性能差异?
string[] lines = File.ReadLines("C:\mytxt.txt").ToArray();
或
string[] lines = File.ReadAllLines("C:\mytxt.txt");
这些方法有任何性能差异吗?
是存在差异
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
}
File.ReadLines
方法返回IEnumerable<string>
。但File.ReadAllLines
返回string[]
如果你读了一个大文件,你最好使用File.ReadLines
方法。因为它从文件中逐行读取,而不是将所有文件读取到占用大量内存的string[]
中。MSDN
ReadAllLines
打开一个文本文件,读取该文件的所有行,然后关闭该文件。
如果您有小文件或必须同时处理整个文件,则在它完全读取文件时使用它,这意味着整个文件都在您的内存中。如果是大文件,则可能会降低性能。
ReadLines
使用文件。ReadLines方法,可以在返回整个集合之前开始枚举字符串集合。
如果您需要分块处理文件(而不是一次处理整个文件),这很有用。
MSDN中的备注:
ReadLines和ReadAllLines方法的区别如下:
使用ReadLines时,可以在返回整个集合之前开始枚举字符串集合;使用ReadAllLines时,必须等待返回整个字符串数组,然后才能访问该数组。因此,当您使用非常大的文件时,ReadLines可以更高效。
以下是可用的更多详细信息和比较演示