較大資料檔案的讀取優化過程續

2021-07-11 03:54:48 字數 936 閱讀 7951

文章1中根據固定行位元組數優化讀取速度有很大的弊端,就是需要解析的檔案可能是不規則行長度的。可以有通用的按行解析的方法。當然前提仍然是基於記憶體對映檔案。這裡操作乙個dat檔案,共分n段,資料以空格分隔,行以\r\n分隔,大部分段平均每行大約10個雙精度浮點數,小部分整數。共180w行,300mb大小。

首先想到的是c的速度快,直接操作指標應該速度不錯。

那麼主要方法就是查詢換行符,和前乙個換行符組成當前行字串,再用sscanf分解到double d[10]陣列裡去。

結果是:release下19s讀完。

繼續優化,sscanfsscanf_s都是可變引數函式模板,一定效率比較低,換成strtok_s

主要方法是先查詢換行符,和前乙個換行符組成當前行字串,再用strtok_s分隔行字串到double d[10]陣列裡去。

結果是:release下16s讀完。

繼續優化,上面的設想都是認為c肯定比c++快,但真的這樣嗎?嘗試的態度下用了string做行分隔,結果卻證明這種情況下stringchar*快。

主要方法是得到記憶體對映檔案指標後,直接用這個指標構造string長字串,然後對這個字串用find('\n')來分隔行,再按上面的方法用strtok_s分隔具體的陣列。

結果是:release下7.9s讀完。很大的提公升了,可見思維定勢不能有啊,c++一樣可以快。

還能繼續優化嗎?或許c++17並行庫可以

1.較大資料檔案的讀取優化過程

大資料檔案讀取方法

filepath 1.txt step 1024 1024 1m str r n start 0 i 1 count 0 do while i 1 echo count file get contents 讀取大檔案方法 param unknown patha 檔案路徑 param unknown ...

C 資料檔案的讀取與寫入 txt檔案

c 建立記事本 方法一 建立物件 filestream stream new filestream d aa.txt filemode.create filemode指定是讀取還是寫入 streamwriter writer new streamwriter stream writer.writel...

Python 讀取位於包中的資料檔案

問題 你的包中包含 需要去讀取的資料檔案。你需要盡ymlgnnbj可能地用最便捷的方式來做這件事。程式設計客棧 解決方案 假設你的包中的檔案組織成如下 mypackage init py somedata.dat spam.py 現在假設spam.py檔案需要讀取somedata.dat檔案中的內容...