在C++中读取12-15GB ASCII文件的最佳方式

Best way to read 12-15GB ASCII file in C++

本文关键字:文件 最佳 方式 ASCII 12-15GB C++ 读取      更新时间:2023-10-16

我正在计算一个巨大文件中的行数。此ASCII文件的大小在12-15GB之间。现在,我正在沿着readline()的行使用一些东西来计算文件的每一行。当然,这是非常缓慢的。我还尝试使用seekg()和tellg()实现较低级别的读取,但由于文件的大小,我无法分配足够大的数组来存储每个字符以运行"\n"比较(我有8GB的ram)。有什么方法可以更快地读取这个大得离谱的文件?我在这里看了很多帖子,大多数人似乎对32位系统的限制没有意见,但在这里,我认为这是一个问题(如果我错了,请纠正我)。

此外,如果有人能向我推荐一种拆分这么大的东西的好方法,那也会很有帮助。

谢谢!

不要试图一次读取整个文件。如果你在数行,只需读给定大小的大块。几个MB应该是一个合理的缓冲区大小。

尝试Boost Memory Mapped Files,一个适用于Windows和POSIX平台的代码。

内存映射文件不需要有足够的RAM来容纳整个文件。我已经成功地将这种技术用于高达30GB的文件(我想我在那台机器中有4GB的RAM)。您将需要一个64位操作系统和64位工具(我在FreeBSD上使用Python)才能解决这些问题。

与显式读取文件块相比,使用内存映射文件显著提高了性能。

您使用的是什么操作系统?该平台上是否没有wc -l或等效命令?