【问题标题】:c# - Processing a Large File, Line by Line - Optimizationc# - 逐行处理大文件 - 优化
【发布时间】:2012-11-27 06:27:39
【问题描述】:

所以我目前正在尝试研究在 c# 中处理大文件的最佳方法。我们目前有一个包含 1000 万多行数据的大文件。最初,我的客户说该文件将包含数万行,因此我们之前将每一行写入一个新文件,并由我们的接口引擎提取以进行处理。然而,现在我们看到这些文件比预期的要大得多,并且处理需要一个周末。我正在尝试优化我们的逻辑,并正在研究实现它的最佳方法。我试图让多个线程从单个文件中读取,但磁盘 I/O 的机械瓶颈并没有提供太大的改进空间。下一个方法是读取每一行并在单独的线程上处理每一行(或一组行)。这将给我们一些优化,因为每行的处理可以同时完成。我知道有些人在处理非常大的文件方面拥有丰富的经验,并希望就我的方法获得一些反馈,或者可能获得一些替代方法来解决这个问题。

感谢任何想法和方法。

【问题讨论】:

  • 您是否直观地显示了您的处理进度?这通常是一个瓶颈,可以通过增加渲染间隔大大减少。
  • 这里常见的优化模式是双缓冲。所以单个读取器读取缓冲区,然后多个线程处理它
  • 单行有多大?当前处理时间是否呈线性增长? (每行 x 秒?)你对哪个 C# 版本有限制

标签: c# multithreading file-processing


【解决方案1】:

然而,现在我们发现这些文件比预期的要大得多,处理需要一个周末

读取一个包含 1000 万行的文件不需要一个周末或类似的时间,因此任何优化工作都应该集中在处理从文件读取的数据而不是文件 I/O。

您没有说明您正在执行什么处理,但是,例如,如果您正在更新数据库,您可以通过将更新批处理到事务中来实现显着的性能改进 - 例如每 10,000 行一个事务。

鉴于它需要整个周末,它不太可能受 CPU 限制,所以我不确定多线程是第一个探索的途径。

如果您需要更多帮助,请提供更多有关您对数据的处理方式的信息。

【讨论】:

    猜你喜欢
    • 2017-07-12
    • 2011-07-04
    • 2023-03-13
    • 2017-07-28
    • 2018-01-18
    • 2012-02-01
    • 2013-05-16
    • 2017-07-15
    相关资源
    最近更新 更多