在C++中读取12-15GB ASCII文件的最佳方式
Best way to read 12-15GB ASCII file in C++
我正在计算一个巨大文件中的行数。此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
或等效命令?
相关文章:
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 创建进行生产构建并创建调试信息的C++生成文件的最佳方法?
- 将位字符串转储到二进制文件的最佳方法是什么
- 比较文件中的最佳平均成绩并打印学生的姓名
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 为Catch2中的外部文本文件指定路径的最佳方式
- 检查特定目录中是否存在与文件匹配的 abc* 的最佳方法
- 复制文件的最佳方式是什么,以便我可以在复制过程中轻松取消复制?
- 获取 exe 文件夹路径的最佳方法?
- 从包含 IP 标头片段的二进制文件中读取结构的最佳方法是什么
- 避免遗漏包含相同文件的最佳方法是什么?
- 如何为多个文件处理选择最佳的I/O策略
- 比较两个文件中的两个中间人的最佳方法.C++
- 在Visual C ++中与Stockfish(外部可执行文件)通信的最佳方式
- 从CSV文件中提取每个条目字段的最佳方法是什么
- 计算文本文件中行数的最佳条件是什么
- 从.txt文件中汲取信息的最佳方法
- 在C 中将多个子类纳入文件中的最佳方法是什么?
- 读取四个数据文件并使用函数将它们放入结构数组的最佳方法是什么
- 头文件和cpp或只是cpp文件-最佳实践