我正在编写一个应用程序以逐行读取文件列表并进行一些处理。我想使用尽可能少的RAM。 我遇到了这个问题https://stackoverflow.com/a/41741702/3531263
发帖人说readString比readLine使用更多的RAM,并且他们已经发布了一些代码。 我不明白的是一个人如何使用更多的RAM?因为最终,他们的代码编写方式仍在将整个行写入其缓冲区。那不是意味着如果他们只是使用readString,那会是同一回事吗?
答案 0 :(得分:4)
编写代码的方式,他们仍然将整行写到缓冲区中
是的,是的。 您的代码可能不需要整个行都同时存储在内存中。例如,您的程序正在按请求ID(位于该行的开头)过滤日志文件。它不需要读取整个行(可能是几兆字节或更多),而只是由于请求ID错误而拒绝它。但是使用ReadString
时,您就没有选择的余地。
答案 1 :(得分:2)
我同意塞尔吉奥。另外,请查看标准库中的the current implementation。 ReadLine
调用ReadSlice('\n')
一次,然后遍历几个分支以确保转换后的数据返回适当的哨兵值或错误。另一方面,ReadBytes
和ReadString
都循环遍历对ReadSlice(delim)
的重复调用,因此得出结论,它们将必须至少复制 数据到记忆为ReadLine
,并且在第一次调用中可能更多if the delimiter wasn't found。