【问题标题】:C++ Write to file line by line in loop or add to array and write to file after loop?C ++在循环中逐行写入文件或添加到数组并在循环后写入文件?
【发布时间】:2018-05-14 10:38:35
【问题描述】:

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

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

【问题讨论】:

    标签: c++ loops save stdvector


    【解决方案1】:

    唯一正确的答案是将这两种方法与您的生产构建设置进行衡量和比较。直观地说,我不明白为什么 vector 方法会更快 - 我希望它会更慢。

    您当前的瓶颈可能是使用std::endl,它会强制将任何缓冲区刷新到其目的地。用\n 替换它,最后只刷新一次——这应该会给你一个相当大的加速。例如

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

    【讨论】:

      【解决方案2】:

      如果“数据”相对较小,那么方法 #1 和 #2 的性能将非常相似。

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

      【讨论】:

        猜你喜欢
        • 2012-08-20
        • 2016-03-08
        • 2019-02-28
        • 2020-05-02
        • 2012-06-27
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多