C 下快速讀取檔案

2021-06-21 15:27:14 字數 1333 閱讀 4009

最近在寫分類演算法,需要和

svm效果做對比。發現svm讀檔案的速度慢的不能忍,所以想**一下windows下的最快的檔案讀取速度。

輸入說明:

1.輸入資料可能有幾千個1m左右的小檔案

2.也可能為100m左右的單個檔案

3.最終資料有數w行,每一行格式如下

:::...

+1 201:1 3148:1 3983:1 4882:1

-1 874:1 3652:1 3963:1 6179:1

每一行大約有幾千個特徵。詳見

svm資料集。

分析:

如果檔案是空格分隔的數字,就算用ifstream

無腦讀也不會慢到**去,windows下能輕鬆達到1s 10m左右的速度。但這裡需要一邊讀一邊解析,若用c++直接讀,由於ifstream的緩衝太低效,導致速度急劇下降(測試1)。若用fread或者非同步讀取,速度必然會更快。

讀取大小13m的1800行,每行約4千個特徵的資料:

1.直接c++getline,然後用istringstream來解析:

int parserline(const std::string &line, instance &in) 

in.label = label;

int id = 0;

char sep = 0;

double val = 0;

while (is >> id >> sep >> val)

}

總耗時:

[2014-04-22-10-19-20]num:1184 |total read time: 53.917999

2.直接c++getline,然後自己解析:

int praserdata(const char *str, int n, std::vector&instances)  else if (str[pos] == '-')  else if (str[pos] == ':')  else if (str[pos] >= '0' && str[pos] <= '9' || str[pos] == '.')  else if (str[pos] == ' ' && is_v) 

++pos;

} if (pos == n)

instances.push_back(in);

return pos;

}}

總耗時:

[2014-04-22-10-18-14]num:1184 |total read time: 24.702000

快速讀取SharedPreferences資料

在開發時時常要用到sharedpreferences存入和讀取一些資料,如果activity很多的話,每次都定義一次sharedpreferences非常麻煩。其實可以很簡單地將sharedpreferences的讀寫抽出來形成乙個工具類,方便呼叫 public class sharedprefer...

PHP如何快速讀取大檔案

在php中,對於檔案的讀取時,最快捷的方式莫過於使用一些諸如file file get contents之類的函式,簡簡單單的幾行 就能 很漂亮的完成我們所需要的功能。但當所操作的檔案是乙個比較大的檔案時,這些函式可能就顯的力不從心,下面將從乙個需求入手來說明對於讀取大檔案時,常用的操作方法。需求需...

PHP如何快速讀取大檔案

原文 php如何快速讀取大檔案 在php中,對於檔案的讀取時,最快捷的方式莫過於使用一些諸如file file get contents之類的函式,簡簡單單的幾行 就能 很漂亮的完成我們所需要的功能。但當所操作的檔案是乙個比較大的檔案時,這些函式可能就顯的力不從心,下面將從乙個需求入手來說明對於讀取...