选择读取文件行的​​实现 - c#

1 c#

最大的文件可能是1GB

遇到了这两个读物

IEnumerable的

如何:从文件中读取文本

哪一个在效率方面更好 - 内存/ CPU

另外,我在哪里可以阅读流阅读器实现的内容?

Jon*_*eet 5

两者都没有 - 如果您使用的是.NET 4,请使用File.ReadLines.

如果您使用.NET 3.5或更早版本,您可以更轻松地比VB页面显示自己写这篇文章,因为VB没有迭代器块还没有(它让他们在未来的版本中,并在比一个更灵活的方式C#):

// Optional: create an overload of this taking an encoding
public IEnumerable<string> ReadLines(string file)
{
    using (TextReader reader = File.OpenText(file))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            yield return line;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是有效的什么File.ReadLines你死活.

然后你可以使用:

foreach (string line in ReadLines("file.txt"))
{
    // Use a line at a time
}
Run Code Online (Sandbox Code Playgroud)

一次不超过一行(缓冲区的大小)将在内存中,并且它也将具有合理的CPU效率.

所有这些都将StreamReader在引擎盖下使用,这是正确的,因为它是将二进制数据流转换为a的规范方式TextReader.基本上它从a读取二进制数据,Stream并使用a Encoding将数据转换为文本请求时.你还需要知道什么?