我的程序读取一个文件,处理它并将结果保存在一个csv文件中。我们整个人都包含一个循环,其中处理了许多不同的文件。为每个文件生成一个单独的 csv 文件。我能够在时间方面非常有效地实现处理,因此保存各自的结果是循环中最长的过程。结果可用,vector <float>目前保存如下:
std::vector<float*> out = calculation(bla);
fstream data;
data.open(savepfad + name + ".csv", ios::out);
data<< sizex << endl;
data<< sizey << endl;
data<< dim << endl;
for (int d = 0; d < dim; d++)
{
for (int x = 0; x < sizex * sizey; x++)
{
data << out[d][x] << ",";
}
data << endl;
}
data.close();
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是,我可以简单地将存储过程外包给一个新线程(可能使用 fork),这样我就可以继续主循环。但是我用的是窗户。我可以以某种方式更快地将数据写入硬盘驱动器吗?有没有人有一个绝妙的主意?
编辑: 所以我根据声明重建了代码,但没有真正的速度优势。代码现在看起来像这样:
std::vector<float*> out = calculation(bla);
string line = std::to_string(sizex) + "\n" + std::to_string(sizey ) + "\n" + std::to_string(dim) + "\n";
for (int d = 0; d < dim; d++)
{
for (int x = 0; x < sizex * sizey; x++)
{
line += out[d][x];
line += ",";
}
line += "\n";
}
fstream data;
data.open(savepfad + name + ".csv", ios::out);
data<<line;
data.close();
Run Code Online (Sandbox Code Playgroud)
我还注意到如果 out [] [] = 0 hours :: to_string (out [] []) 使 0 从 0.00 到 0.000000,并且 data << out [] [] 只将 0 写入文件。这使得文件大小从 8000KB 到 36000KB。因此,如果我可以在 python 中将准即时 100MB 转储到硬盘上,我必须能够相对快速地写入 8000KB,目前需要 1 到 2 分钟。
示例尺寸:
sizex = 638
sizey = 958
dim = 8
Run Code Online (Sandbox Code Playgroud)
时间测量显示,通过这两个循环几乎需要整个时间。它是一个由数组组成的向量。是不是访问out太慢了?
data << endl发送换行符并将结果刷新到磁盘。你可以做
data << "\n";
Run Code Online (Sandbox Code Playgroud)
而是在不刷新的情况下发送换行符。最终结果是您刷新的次数更少,这意味着您等待操作系统的时间更少。
如果这仍然不够快,请考虑将所有内容缓冲到 a 中,ostrstream然后data一次性将其转储。
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |