【发布时间】:2021-03-19 09:02:49
【问题描述】:
我目前正在做我的项目,但整个程序浪费了太多时间。
经过一些测试,我发现程序在 I/O 上花费了太多时间。
因为每个文件都有不同的数据大小,而且我在程序中使用随机元素,所以很难提前阅读。
希望有人能帮我处理一下。
vector<string> _csv(string s)
{
vector<string> arr;
istringstream delim(s);
string token;
int c = 0;
while (getline(delim, token, ','))
{
arr.push_back(token);
c++;
}
return arr;
}
string filename = company[0] + "_RSI" + std::to_string(rsi[j][24]) + ".csv";
// cout << filename << endl;
ifstream inFile(".\\RSI1~256\\" + filename, ios::in);
if (!inFile) {
cout << "Open failed!" << endl;
exit(1);
}
string line;
while (getline(inFile, line)) {
vector<string> a = _csv(line);
RSI.push_back(atof(a[2].c_str()));
price.push_back(atof(a[1].c_str()));
date.push_back(a[0]);
}
【问题讨论】:
-
也许尝试以二进制格式保存它?我没有这方面的经验,但可能有助于提高读写速度。
-
“程序在 I/O 上花费了太多时间”。这不是一个简单的代码修复。您显示的代码只是将数据推送到向量上。虽然重新分配(当需要调整大小时)需要时间,但对于磁盘访问来说可以忽略不计。实际上是什么问题?你想让我做什么?为什么程序“浪费太多时间”?文件访问总是需要时间。
-
除非您向我们展示
_csv函数,否则我们无法判断。另外,请检查您测量的是发布版本时间,而不是调试版本时间。 -
如果要进行优化,那就是尽可能多地预加载数据。也可能压缩它,而不是使用原始 CSV。
-
尝试使用内存映射文件。