objective-c - 使用C++從檔案讀取五千萬個資料存入vector中如何加快速度?
PHP中文网
PHP中文网 2017-05-31 10:36:40
0
4
906

我需要從txt檔案讀取五千萬個double數據,並且存入vector中,我最初覺得可能是文件io太慢,所以使用了文件內存映射,將文件內容當成block全部讀入內存中,然後再一個一個push_back進vector中,但直接從檔案一個一個讀取資料只需要3分鐘,我優化之後反而增加到了5分鐘。

我的最佳化方案是,將檔案整塊讀入內存,放在char*的buffer中,再使用vec_name.reserve(50000000);分配五千萬的容量,避免重複分配內存,但是好像沒有什麼作用。

難道是因為時間主要花在push_back上面了麼?

請問有什麼好的最佳化方法麼?謝謝各位大神了!
優化後的關鍵程式碼如下:(需要五分鐘才能將全部資料讀入vector)

        
        ifstream iVecSim("input.txt");
        
        iVecSim.seekg(0, iVecSim.end);
        long long file_size = iVecSim.tellg();//文件大小
        iVecSim.seekg(0, iVecSim.beg);

        char *buffer = new char[file_size];
        iVecSim.read(buffer, file_size);

        string input(buffer);
        delete[]buffer;

        istringstream ss_sim(input);//string流

        string fVecSim;
        vec_similarity.reserve(50000000);
        while (ss_sim.good()) {//从string流中读入vector
            ss_sim >> fVecSim;
            vec_similarity.push_back(atof(fVecSim.c_str()));
        }
PHP中文网
PHP中文网

认证0级讲师

全部回覆(4)
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!