首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一次读、处理和写一行有效吗?

一次读、处理和写一行有效吗?
EN

Stack Overflow用户
提问于 2015-06-26 11:17:05
回答 2查看 98关注 0票数 2

我正在处理一个项目,需要读取一个文件,对每一行进行一些操作,并生成一个新文件。我有点担心表演。哪种算法更有效?我在下面写了一些伪码。

  1. 将所有内容存储到数组中,关闭文件,操作每一行,并存储新数组以输出文件: openInputFile() lineArray[] = readInput() closeInputFile() for (i in lineArray) // I:当前行操作I newArray[] += I //存储操作行到新的数组openOutputFile() writeOutput(newArray) closeOutput()
  2. 获得循环中的每一行,在操作后将新行写入输出。 openInputFile() openOutputFile() for (i in inputFile) // i:当前行操作我打印操纵行以输出closeInputFile() closeOutputFile()

我该选哪一个?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-26 11:25:32

这取决于输入文件的大小:

  • 如果它很小,那么使用哪种方法并不重要。
  • 如果它足够大,那么同时在内存中保存整个输入文件和整个输出文件的开销可能会对性能产生重大影响。(增加了寻呼负载,等等)
  • 如果它真的很大,您将耗尽内存,应用程序将失败。
  • 如果无法预测将出现的行数,则预先分配行数组是有问题的。

如果您使用缓冲输入和输出流,则第二个版本将更高效,使用更少的内存,并且如果输入文件太大不会中断。

票数 2
EN

Stack Overflow用户

发布于 2015-06-26 11:20:21

在这两种情况下,您从每个文件读取一次,并写入每个文件一次。从这个角度看,效率没有多大差别。文件系统擅长缓冲和序列化IO,而磁盘几乎总是这类事情的限制因素。

在极端情况下,有时通过批处理写入操作可以获得一定的效率--一个大型的写操作比许多小的写操作更有效。然而,这在现代操作系统中很少相关,因为他们已经在幕后这样做了。

因此,这两种方法之间的关键区别在于内存的使用--在前一种情况下,您的内存占用量要大得多,而且无法从中获得任何好处。因此,你应该选择第二个选择*。

*除非您实际上需要引用数组中的其他部分,例如,如果您需要对数据进行排序,因为您确实需要将整个文件拖到内存中来操作它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31071832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档