我开发了一个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();

10-02 23:06