【发布时间】:2015-02-16 15:34:57
【问题描述】:
我实际上是在开发科学的 C++ 模拟程序,它读取数据,从中计算大量值,最后将结果存储在文件中。我想知道在程序开始时一次读取所有数据是否比在程序期间通过std::ifstream继续访问文件更快。
我使用的数据不是很大(几 MB),但我什至不知道堆分配的“大”是什么......
我猜这取决于数据等(经过一些测试,实际上它取决于),但我想知道它取决于什么以及是否有一种我们应该遵循的一般原则。
长话短说,问题是:保持文件打开并使用文件操纵器是否比潜在的大堆分配和使用字符串操纵器更快?
【问题讨论】:
-
访问内存总是比访问磁盘快。这实际上取决于您需要读取的数据量以及运行程序的上下文。我记得几年前,我不得不从一个大约 4MB 的文件中读取一些数据,而令人惊讶的是,它可以放入缓存中!在我的情况下,通过将所有数据加载到内存中,程序的速度大大提高了;)
-
如果不进行测量,我猜让
fstream进行缓冲可能比将所有内容读入内存要快。它当然更简单,更具可扩展性,所以在你确定它是一个瓶颈之前这样做。但你应该衡量,而不是猜测。 -
这个问题比 Stack Overflow 更适合programmers.stackexchange.com,因为您询问的是您想要设计/重构的代码,而不是存在且不起作用的代码
-
是的,谢谢。