优化大型数据集的浮点解析
从大文件中解析空格分隔的浮点可能是一项耗时的任务。当处理数百万行且每行有多个浮点数时尤其如此。为了应对这一挑战,必须采用有效的解析技术来最大限度地减少性能瓶颈。
测量解析速度
为了评估不同解析方法的有效性,基准是使用包含数百万个空格分隔的浮点数的 515Mb 输入文件进行。结果显示不同方法之间的解析时间存在显着差异。
Boost Spirit:表现最佳
令人惊讶的是,Boost Spirit 成为最快的解析解决方案。这个强大的库与传统方法相比有几个优点:
其他解析技术
虽然 Boost Spirit 在解析速度上处于领先地位,但其他技术也表现出了可喜的结果。
基准测试结果
下图总结了使用内存映射文件的不同方法的解析时间:
[图像解析时间基准结果]
选择正确的方法
最佳解析方法取决于应用程序的具体要求。如果速度和准确性至关重要,Boost Spirit 是一个绝佳的选择。对于更简单的场景,Eigen 或 C 14 正则表达式可能就足够了。
.hpp 文件(旧实现)
std::vector<data> read_float3_data(std::string const &in) { namespace spirit = boost::spirit; namespace qi = boost::spirit::qi; typedef std::vector<data> list; qi::rule<it, list(), qi::locals<bool>, data> triplet_rule = qi::phrase( (qi::double_ > qi::double_ > qi::double_) % qi::eol, qi::space, data()); it first = in.begin(); it last = in.end(); it err = in.end(); bool parsing_ok = qi::phrase_parse(first, last, triplet_rule, qi::space, data(), qi::_pass, err); assert(parsing_ok && first == last); (void)err; return data(); }
以上是如何优化大型数据集的浮点解析?的详细内容。更多信息请关注PHP中文网其他相关文章!