【问题标题】:read huge file line by line in c# [duplicate]在c#中逐行读取大文件[重复]
【发布时间】:2023-03-27 04:32:02
【问题描述】:

我在 c# 中有大量文件(超过 300 MB)。我需要有效的方式来逐行读取文件,因为一旦我尝试读取它需要 30 多分钟,而目标时间约为 3 分钟。我尝试了 File.ReadAllBytes ,它成功且非常快速地读取文件并将其加载到字符串中。但在那之后,逐行处理字符串需要很长时间。有没有更好的方法或更快的方法来做到这一点。

提前致谢。

【问题讨论】:

  • 听起来你的问题不是加载,而是处理。您没有发布相关代码。
  • 我们在谈论什么样的流程?
  • File.ReadLines(由 wudzik 建议)绝对是一个好主意。但是“300MB”真的没有那么大。问:这个 300MB 的文件有多少行?更重要的是: 问:你在每一行的循环中到底在做什么? Q:有什么办法可以优化“per line”处理?
  • 根据当前信息,您的问题与许多“逐行读取大文件”重复。请注意,与从文件读取直接相关的实际问题(从本地磁盘读取 300MB)不太可能需要几秒钟,而不是几分钟 - 提供一些关于您实际使用字符串做什么的信息(可能在您分析代码后的单独问题中)提供必要的信息)。

标签: c# file-read


【解决方案1】:

您可以使用File.ReadLines,它将通过文件行枚举:

var lines = File.ReadLines(path);

foreach(var line in lines)
{
    // do your logic here
}

它不会在第一行加载文件。它将在循环通过 lines 时加载它,因此它是读取更大文件的更好方法,而不是一次加载它。

MSDN 在File.ReadLines的描述中说

备注 ReadLines 和 ReadAllLines 方法的区别如下: 你使用 ReadLines,你可以开始枚举字符串的集合 在返回整个集合之前;当您使用 ReadAllLines 时, 您必须等待整个字符串数组在您返回之前 可以访问数组。因此,当您使用非常大的 文件,ReadLines 可以更高效。

【讨论】:

  • 来自msdn的附加信息:> 使用ReadLines时,可以在返回整个集合之前开始枚举字符串集合;使用 ReadAllLines 时,必须等待返回整个字符串数组才能访问该数组。因此,当您处理非常大的文件时,ReadLines 会更有效率。
  • @dotnetkid 我只是添加了来自 MSDN 的引用 :)
猜你喜欢
  • 2015-05-19
  • 2020-02-21
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2010-12-24
相关资源
最近更新 更多