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);

ほとんどの場合、すべてのタスクに対して 1 つの単純な文法を作成することは可能ですが、正確に解析しているものがわからないため、上記のコードに多かれ少なかれ一致させようとしました。

于 2013-04-13T09:20:43.067 に答える