C++ 循环逐行写入文件还是添加到数组并在循环后写入文件?
C++ Write to file line by line in loop or add to array and write to file after loop?
我开发了一个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
中(除非无论如何都需要这样做(。
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 使用fstream对txt文件中的数字进行循环
- 视觉 如何循环访问C++中遵循类似格式的多个.txt文件?
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 虽然循环不读取整个 ifstream 文件
- 如何在头文件中声明类模板(由于循环依赖关系)
- 如何使用循环逐个读取C++中的多个文件
- 是否可以在文本文件中找到最长单词的长度,并在同一个文本文件中读取,只需 1 个 while 循环?
- 如何循环 n 次,在 xml 文件中每个循环一个级别
- 如何通过一个循环将多个文件的内容分配给不同的类属性?
- 从文件 C++ 读取时的无限循环
- 从文件读取,并循环访问文件以写入数组
- 从文件导入数据时遇到问题.我有一个没完没了的循环
- C++:从文件中读取x y数据会产生无限循环吗
- 从文件循环输入的更合适方法?
- 通过C(或C )中的WAV文件循环
- 有没有办法仅通过JPG文件循环
- 从文件循环输入流
- c++单文件循环引用