【问题标题】:c# Disk I\O efficiency improvement read multiple lines at a timec#磁盘I\O效率提升一次读取多行
【发布时间】:2020-10-16 13:48:49
【问题描述】:

众所周知,磁盘 I\O 很昂贵。 我通常使用 C# 从 .txt 文件中一次读取一行。 我突然想到,如果 C# 给你一种一次读取 100 行的方法,它将需要更少的磁盘往返行程,从而减少时间。 这可能吗? 有没有人对如何提高效率有任何想法。 我在大约一个小时内浏览了一个包含 100 万行的文件,一次读取和处理一行。 我想看看我是否可以显着减少这个时间。

【问题讨论】:

标签: c# text-files disk-io


【解决方案1】:

FileStream 为您执行此操作,它有一个内部缓冲区并以块的形式读取文件。碰巧File.ReadLines 使用基于FileStreamStreamReader 并根据行返回IEnumerable。它在本质上为您完成一切

我的建议是使用File.ReadLines

如果您需要对内部缓冲区和块大小进行更细粒度的控制,请使用FileStreamStreamReader,它允许配置这些问题等等...

【讨论】:

  • 这是一个非常有趣的想法。我会在这些日子里试一试。我现在看到的缺点是您将在一个语句中读取一个很大的长文件,这可能需要时间,并且可能很难给出进度条。但也许读一百万行不会花那么长时间。我不知道。我得试试看……
  • "一个大的长文件在一个语句中" 不,它实际上不正确,您将逐行枚举文件,这反过来又会在您读取时分块读取正在枚举它。除非文件符合 4k 的标准块大小,否则文件不会被读取一大块
猜你喜欢
  • 2014-05-20
  • 2021-12-04
  • 2017-03-23
  • 2019-12-07
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多