【发布时间】:2012-11-27 06:27:39
【问题描述】:
所以我目前正在尝试研究在 c# 中处理大文件的最佳方法。我们目前有一个包含 1000 万多行数据的大文件。最初,我的客户说该文件将包含数万行,因此我们之前将每一行写入一个新文件,并由我们的接口引擎提取以进行处理。然而,现在我们看到这些文件比预期的要大得多,并且处理需要一个周末。我正在尝试优化我们的逻辑,并正在研究实现它的最佳方法。我试图让多个线程从单个文件中读取,但磁盘 I/O 的机械瓶颈并没有提供太大的改进空间。下一个方法是读取每一行并在单独的线程上处理每一行(或一组行)。这将给我们一些优化,因为每行的处理可以同时完成。我知道有些人在处理非常大的文件方面拥有丰富的经验,并希望就我的方法获得一些反馈,或者可能获得一些替代方法来解决这个问题。
感谢任何想法和方法。
【问题讨论】:
-
您是否直观地显示了您的处理进度?这通常是一个瓶颈,可以通过增加渲染间隔大大减少。
-
这里常见的优化模式是双缓冲。所以单个读取器读取缓冲区,然后多个线程处理它
-
单行有多大?当前处理时间是否呈线性增长? (每行 x 秒?)你对哪个 C# 版本有限制
标签: c# multithreading file-processing