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

标签 c#

文件最大可以是 1GB

遇到了这 2 篇文章

IEnumerable

How to: Read Text from a File

内存/cpu效率哪个好

此外,我在哪里可以了解流阅读器在幕后实现的功能?

最佳答案

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

如果您使用的是 .NET 3.5 或更早版本,您可以自己编写这个比显示的 VB 页面更容易,因为 VB 还没有迭代器 block (它将在下一个中获取它们版本,并以比 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;
        }
    }
}

这就是有效 File.ReadLines 为您所做的。

然后你可以使用:

foreach (string line in ReadLines("file.txt"))
{
    // Use a line at a time
}

内存中一次不会超过一行(缓冲区的大小),而且它的 CPU 效率也相当高。

所有 都将在后台使用 StreamReader,这是正确的,因为它是将二进制数据流转换为 TextReader 的规范方法。基本上,它从 Stream 读取二进制数据,并在请求时使用 Encoding 将该数据转换为文本。您还需要了解什么?

关于c# - 读取文件行的​​实现选择 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017918/

相关文章:

c# - 如何创建可以与GUI *或*一起作为C#中的Windows服务运行的Windows应用程序?

c# - 如何检测多线程使用?

c# - 将 Asp.Net Core 1 转换为 Core 2 后 Jwt 不工作

c# - 如何将sql server express数据库连接到VS 2017

c# - 如何(以及是否)使用 TPL 编写单一消费者队列?

c# - Azure Active Directory创建多个租户

C# 动态和扩展方法解决方案?

c# - 是否可以映射到带有别名的枚举?

c# - 在持续集成中优化编译时间

c# - ThreadPool.QueueUserWorkItem preferLocal 有什么用?