我开发了一个主要在单个循环内运行的 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 中,然后一次性写入文件?
最佳答案
唯一正确的答案是衡量这两种方法并将其与您的生产build设置进行比较。直觉上,我不明白为什么 vector
方法会更快 - 我预计它会更慢。
您当前的瓶颈可能是 std::endl
的使用,它强制将任何缓冲区刷新到其目的地。将其替换为 \n
并且最后只刷新一次 - 这应该会给您带来相当大的加速。例如
for(int tstep=0;tstep<maxTstep;++tstep)
{
<code>
outFile<<"data"<<'\n';
}
outFile.flush();
关于C++在循环中逐行写入文件或添加到数组并在循环后写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50328313/