用C ++读取12-15GB ASCII文件的最佳方法

时间:2011-06-29 00:34:46

标签: c++ file memory-management

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

另外,如果有人能推荐我一个很好的方法来分割这么大的东西,那也会有所帮助。

谢谢!

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

使用内存映射文件显着提高了显式读取文件块的性能。

答案 3 :(得分:0)

你在做什么操作系统?该平台上没有wc -l或等效命令吗?