最佳化大型資料集的浮點解析
從大檔案中解析空格分隔的浮點可能是一項耗時的任務。當處理數百萬行且每行有多個浮點數時尤其如此。為了應對這項挑戰,必須採用有效的解析技術來最大限度地減少效能瓶頸。
測量解析速度
為了評估不同解析方法的有效性,基準是使用包含數百萬個空格分隔的浮點數的 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中文網其他相關文章!