C++ 循环逐行写入文件还是添加到数组并在循环后写入文件?

C++ Write to file line by line in loop or add to array and write to file after loop?

本文关键字:文件 循环 数组 逐行 C++ 添加      更新时间:2023-10-16

我开发了一个CFD仿真模型,该模型主要在单个循环中运行。

有一些数据需要在每个时间步长输出,例如线性代数求解器中的收敛和迭代。

执行此操作的最佳做法是什么?目前我有:

for(int tstep=0;tstep<maxTstep;++tstep)
{
<code>
outFile<<"data"<<endl;
{

在每个循环结束时将一行写入多个文件。是否更好的做法是:

for(int tstep=0;tstep<maxTstep;++tstep)
{
<code>
outputVector.push_back("data");
}
for(int i=0;i<outputVector.size();++i) outFile<<outputVector[i]<<endl;

从而将输出数据添加到向量,然后一次性写入文件?

唯一正确的答案是测量这两种方法并将其与生产构建设置进行比较。直觉上,我不明白为什么vector方法会更快——我希望它会更慢。

可能您当前的瓶颈是使用std::endl,这会强制将任何缓冲区刷新到其目的地。将其替换为n,并且仅在结束时刷新一次 - 这应该会给您带来相当大的加速。例如

for(int tstep=0;tstep<maxTstep;++tstep)
{
<code>
outFile<<"data"<<'n';
}
outFile.flush();

如果"data"相对较小,那么两种方法#1和#2将具有非常相似的性能。

如果"数据"很大,例如几百个字节或更多,那么方法 #1 会更可取,因为它避免将数据分配和复制到outputVector中(除非无论如何都需要这样做(。