C# 如何在合并文件时获得更高的性能

C# 如何在合并文件时获得更高的性能,c#,csv,C#,Csv,我有500个csv文件, 每一个的大小约为10~20M 对于示例,文件中的内容如下所示↓ 文件1: column1 column2 column3 column4 .... column50 文件2: column51 column52 ... ... column100 所以,我想做的是将所有文件合并到一个大文件中,如下所示↓ fileAll column1 , column2 ...... column2500 在我的解决方案中,现在是 1, Merge per 100 files

我有500个csv文件, 每一个的大小约为10~20M

对于示例,文件中的内容如下所示↓

文件1:

column1 column2 column3 column4 .... column50
文件2:

column51 column52 ... ... column100
所以,我想做的是将所有文件合并到一个大文件中,如下所示↓

fileAll

column1 , column2 ......  column2500 
在我的解决方案中,现在是

1, Merge per 100 files into  5 large files

2, Merge 5 large files into one large file
但是性能很差

那么,谁能给我一些建议来提高性能呢


谢谢

您可以尝试将其作为流式操作;不要做1。加载文件1,2。加载文件2、3。合并,4。写结果。相反,你应该做1。加载文件1和2的第1行,2。合并行,3。写一行。通过这种方式,您可以通过执行较小的读、处理、写块来加快速度,从而允许磁盘在合并每一行(行)时清空其读/写缓冲区。可能还有其他事情会减慢你的进程。请输入邮政编码。例如,如果不小心执行,字符串操作很容易减慢速度。最后,发布模式(与调试相反)更优化,通常运行速度更快。

我不知道您使用的是哪种语言,我认为您可以通过逐行执行流来获得最佳性能

例如,读取所有文件的第一行,写出合并的第一行。继续,直到你的任务完成

这比您的解决方案好的原因是您的解决方案多次在磁盘上读取和写入相同的数据,速度很慢。我假设您无法在内存中容纳所有文件(而且您也不想这样做,因为缓存会很糟糕),但您希望最小化磁盘读写(最慢的操作),并尝试以一种方式来完成,即要写入的每个段都可以容纳在缓存中


所有这些,取决于您使用的语言,您可能会对连接字符串产生巨大的影响。而使用空终止数组作为字符串实现的语言将因连接大字符串而遭受巨大打击,因为它必须搜索空终止符。python是我脑海中的一个例子。因此,您可能希望限制使用的字符串的大小。在上面的例子中,读入x多个字符,写出x多个字符等。但是您仍然应该只读取一次数据,如果可能的话,再将数据写入一次。

您的代码是什么样子的?谢谢您的帖子,我只是想先想出一个主意。。如果需要,我会把我的代码放在…:)这似乎是一个非常好的例子,说明了TPL应该为您提供性能改进,因为您可以单独合并任意两个文件。尽管如此,如果写得太频繁,性能会更差。此外,请查看以下内容: