2012-11-26 73 views
0

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

任何想法和意见,赞赏。

+3

你是否可视化地显示你的处理进度?这通常可能是一个瓶颈,通过增加渲染间隔可以大大减少瓶颈。 –

+1

这里的常见优化模式是双缓冲。因此,一个读取器读取缓冲区,然后多个线程处理它 – zerkms

+0

个别行有多大? 目前处理时间是否线性缩放? (每行x秒?) 你有限制哪个版本的C# –

回答

2

但是现在,我们看到这些文件会以远远大于预期,处理需要一个周末

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

你不是说你在做什么样的处理,但是,例如,如果你正在更新数据库,则可以按配料多达更新到交易实现惊人的性能提升 - 说每10000行一个事务。

由于它采取的所有周末,它不可能是CPU绑定的,所以我不知道多线程是探索第一大道。

提供关于你的数据做什么,如果你想要更多的帮助一些更多的信息。