下面给出了我当前的解析器 - 将 ~10MB CSV 读取到 STL 向量需要 ~30 秒,这对我来说太慢了,因为我有超过 100MB 需要在每次运行程序时读取。任何人都可以就如何提高性能提供一些建议吗?确实,在纯 C 语言中会更快吗?
int main() {
std::vector<double> data;
std::ifstream infile( "data.csv" );
infile >> data;
std::cin.get();
return 0;
}
std::istream& operator >> (std::istream& ins, std::vector<double>& data)
{
data.clear();
// Reserve data vector
std::string line, field;
std::getline(ins, line);
std::stringstream ssl(line), ssf;
std::size_t rows = 1, cols = 0;
while (std::getline(ssl, field, ',')) cols++;
while (std::getline(ins, line)) rows++;
std::cout << rows << " x " << cols << "\n";
ins.clear(); // clear bad state after eof
ins.seekg(0);
data.reserve(rows*cols);
// Populate data
double f = 0.0;
while (std::getline(ins, line)) {
ssl.str(line);
ssl.clear();
while (std::getline(ssl, field, ',')) {
ssf.str(field);
ssf.clear();
ssf >> f;
data.push_back(f);
}
}
return ins;
}
注意:我还可以使用 openMP,其内容最终将用于 CUDA 的 GPGPU 计算。