一行一行地阅读文件和整个文件一次性读取有没有明显的区别(在理论上)?
一次性读取整个文件确实会对内存使用量产生负面影响,但它会更快吗?
我需要读取一个文件并处理每一行。 我不知道是应该一次读取一行并处理它,还是读取整个文件,全部处理完后再写入输出。
我已经设置了程序逐行读取,并想知道是否值得努力将其更改为读取整个文件(考虑到我的设置,这不容易)。
谢谢,
一行一行地阅读文件和整个文件一次性读取有没有明显的区别(在理论上)?
一次性读取整个文件确实会对内存使用量产生负面影响,但它会更快吗?
我需要读取一个文件并处理每一行。 我不知道是应该一次读取一行并处理它,还是读取整个文件,全部处理完后再写入输出。
我已经设置了程序逐行读取,并想知道是否值得努力将其更改为读取整个文件(考虑到我的设置,这不容易)。
谢谢,
读取整个文件的速度会稍微快一些,但并不是很快!
但要小心,读取整个文件不具有可扩展性,因为您受到系统中可用内存的限制。一旦文件大小超过程序可用RAM的大小,它将开始使用交换空间,这将使速度变慢。如果文件大小超过虚拟内存可用的大小,则程序将崩溃。
将整个文件读入内存通常不是一个好主意,因为文件可能非常大,可能会占用大量内存,并在最坏的情况下耗尽内存。因此,为了平衡性能和内存使用率,您可以将文件的一块读入缓冲区并解析缓冲区。当您完成处理该块时,请读取下一块,直到EOF。
根据您想要实现的目标,需要确定一个良好的块大小。
一个因素是你将要读取多少数据,以及程序最初运行的时间有多长,即是否有任何在性能方面工作的好处。
请参阅this answer中的书籍引用,了解一些关于思考软件性能的好的、通用的建议。
(我知道你是为了一个理论答案,但是当你有限的时间需要花费时,关注性能的这个方面也很重要。)