File.ReadAllLines
不是延迟加载,而是将所有内容加载到内存中。
string[] allLines = File.ReadAllLines(filePath);
如果你想使用 LINQ 的延迟执行,你可以使用File.ReadLines
:
var fileLines = File.ReadLines(filePath)
.Where(line =>
{
line = line.Trim();
return line.Contains("hello");
});
这也记录在案:
ReadLines
和方法的ReadAllLines
区别如下: 使用时
ReadLines
,可以在返回整个集合之前开始枚举字符串集合;使用 时ReadAllLines
,必须等待返回整个字符串数组才能访问该数组。因此,当您处理非常大的文件时,ReadLines 会更有效率。
但请注意,您必须小心,ReadLines
因为您不能使用它两次。如果您再次尝试“执行”它,您将得到一个,ObjectDisposedException
因为底层流已经被释放。更新 此错误似乎已修复。
这将导致异常,例如:
var lines = File.ReadLines(path);
string header = lines.First();
string secondLine = lines.Skip(1).First();
由于流仍处于打开状态,因此您也不能使用它来写入同一个文件。
File.WriteAllLines(path, File.ReadLines(path)); // exception: being used by another process.
在这些情况下File.ReadAllLines
更合适。