文件c++的写入性能
Write performance of a file c++
我需要用c++编写一个文件。内容是while循环中的标记,所以现在我一行一行地写。现在我在想,我可以节省变量中的所有内容,然后编写文件,从而提高编写时间。有人知道这两种方式中哪一种更好吗?
每一行都由以下函数编写:
void writeFile(char* filename, string value){
ofstream outFile(filename, ios::app);
outFile << value;
outFile.close();
}
while(/* Something */){
/* something */
writeFile(..);
}
另一种方式是:
void writeNewFile(char* filename, string value){
ofstream outFile(filename);
outFile<<value;
outFile.close();
}
string res = "";
while(/* Something */){
/* something */
res += mydata;
}
writeNewFile(filename, res);
您考虑过吗;
ofstream outFile(filename);
while(/* Something */){
/*...*/
outFile<< mydata;
}
outFile.close();
outfile(流)是缓冲的,这意味着在将数据写入磁盘之前,它将在内部缓冲区(如字符串)中积累数据——除非您有非常特殊的要求,否则您不太可能做到这一点。
在第一种情况下,每次循环迭代都要关闭文件流并打开一个新的流,最好执行以下操作:
void writeFile(const std::string& value, std::ostream* os = nullptr) {
if (os != nullptr) {
os << value;
}
}
或者:
void writeFile(const std::string& value, std::ostream& os) {
os << value;
}
然后用您在另一个函数/main/whatever中创建的fstream
对象(或第一种情况下的地址)调用它。
至于连续写还是最后写更快,这实际上取决于你在while
循环中执行的计算类型,以及这会在多大程度上减缓整个过程。然而,出于可靠性原因,如果程序在while
循环执行过程中因任何原因崩溃,有时最好连续写入,以避免丢失所有数据。
fstream对象已经被缓冲,因此添加到字符串中对您没有多大帮助,事实上,当超过之前分配的大小时,由于字符串内容的重新分配,甚至可能会失去性能。必须通过测试才能知道。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么constexpr的性能比正常表达式差
- 在类中使用随机生成器时出现性能问题
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 海湾合作委员会 ARM 性能下降
- GCC 和 Clang 代码性能的巨大差异
- 在容量内调整矢量大小时的性能影响
- 了解算法的性能差异(如果以不同的编程语言实现)
- 未达到的情况会影响开关外壳性能
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 哪种方法更好,性能明智
- C++ 特征库:引用的性能开销<>
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 基于范围的 for 循环range_declaration中各种说明符之间的性能差异
- std::p mr::memory_resource 如何与 std::container 产生性能差异?
- 不同的类或结构初始化方法之间的性能差异是什么?