1

这个问题实际上是对我之前发布的问题的更新。根据用户的意见,我意识到我需要分析我的代码,因此我通过 Vtune Amp 分析了我的代码的第一部分。与其他方法相比,我得到了以下语句,这些语句消耗了大量时间

Source Line Source                                                                        CPU Time by Utilization   Overhead Time   Spin Time
double high_val =  atof(temp[2].c_str());                                                                           
std::string s( (std::istreambuf_iterator<char>(&buffer)), std::istreambuf_iterator<char>());            
boost::split( temp, lines[i], boost::is_any_of(",") );                                              

在上面的代码缓冲区中是: boost::asio::streambuf buffer;

关于上述替换功能的任何建议?

4

1 回答 1

3

尝试Boost.Sprit所有的解析任务。如果你有很多规则,它可能会消耗更多的编译时资源,但在运行时会很快。

对于第一行:

#include <boost/spirit/include/qi.hpp>
std::string::iterator begin = temp.begin() + 2;
std::string::iterator end = input.end();
float high_val;
boost::spirit::qi::parse(begin, end, boost::spirit::float_, high_val);

最后一行:

std::vector<std::string>;
// '%' is a list parser
boost::spirit::qi::parse(buffer.data(), buffer.data() + buffer.size(), *(char_ - ',') % ',', lines);

最有可能的是,可以为您的所有任务创建一个简单的语法,但我不知道您正在解析什么,所以我只是尝试或多或少地匹配您的上述代码。

于 2013-04-13T09:20:43.067 回答