2013-04-13 85 views
1

這個問題實際上是我發佈的a previous question的更新。從用戶的意見,我意識到我需要剖析我的代碼,所以我通過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;

關於上述替換函數的任何建議?

+0

什麼是'buffer'類型? –

+1

更新了問題 – Rajeshwar

+0

好的,我明白了。你打算用's'做什麼?要真的需要創建這個對象,或者你可以直接使用'buffer.data()'? –

回答

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

最有可能的,它可以創建您的所有任務,一個簡單的語法,但我不知道是什麼你正在解析,所以我只是試圖匹配你上面的代碼或多或少。

+0

我該如何在boost精神中做這樣的事情'boost :: algorithm :: split_regex(Vector,string,boost :: regex(「\ r \ n」));' – Rajeshwar

+0

堆棧矢量叫做'lines'嗎? – Rajeshwar

+0

@Rajeshwar如上所示,你可以用%解析器分割任何東西。當然,你必須學習Spirit(至少它的'Qi'部分 - 用於解析)來有效地使用它(http://www.boost.org/doc/libs/1_53_0/libs/spirit/doc/html/精神/ qi.html)。 –