gpt4 book ai didi

c++ - 使用 C++ 读取 txt 文件并快速解析它们并 boost 内存映射文件

转载 作者:太空狗 更新时间:2023-10-29 21:45:31 26 4
gpt4 key购买 nike

重要修改:问题不是我所说的,在手动分析后我明白当我替换行时:“file >> x >> y >> z;”用行“file.readline(buffer, size);”

它只需要 0.4 秒,所以问题完全不同,如何解析行中的 float ,file>>x>>y>>z;

(不知道该不该删问题,因为原问题不相关)

=== 旧 ===在对 Internet 和堆栈溢出进行了大量研究之后,我了解到使用 C++ 读取大文件的最佳方法是使用内存映射文件。

我有一个 15MB 的 txt 文件,每行有 3 个由空格分隔的 float 。

我有这段代码:

ifstream file(path)
float x,y,z;
while(!file.eof())
file >> x >> y >> z;

可以在 9.5 秒内读取此文件。

为了使用 stackoverflow 用户更快地读取文件,我想出了这段代码,如果我理解它正确地使用内存映射文件并且应该更快地读取它 Stream types in C++, how to read from IstringStream?

#include <iostream>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/device/mapped_file.hpp>
namespace io = boost::iostreams;

int main()
{
io::stream<io::mapped_file_source> str("test.txt");
// you can read from str like from any stream, str >> x >> y >> z
for(float x,y,z; str >> x >> y >> z; )
std::cout << "Reading from file: " << x << " " << y << " " << z << '\n';
}

不幸的是速度保持不变,仍然是 9.5 秒。

有什么建议吗?谢谢

最佳答案

流很慢。部分是因为适用于它们的约束很繁重,部分是因为实现往往优化不佳。

尝试使用 Boost.Spirit 解析器。虽然语法需要一点时间来适应并且编译有时会很慢,但 Spirit 的运行时性能非常高。

关于c++ - 使用 C++ 读取 txt 文件并快速解析它们并 boost 内存映射文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17450782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com