编写文件的性能c ++

时间:2016-04-07 17:26:11

标签: c++ performance writefile

我需要用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);

3 个答案:

答案 0 :(得分:7)

你考虑过了吗;

ofstream outFile(filename);
while(/*    Something   */){
   /*...*/    
   outFile<< mydata;
}
outFile.close();

outfile(streams)是缓冲的,这意味着它会在将数据写入磁盘之前将数据累积在内部缓冲区(如字符串)中 - 除非你有非常特殊的要求,否则你不可能超越它

答案 1 :(得分:2)

在第一种情况下,您在每次循环迭代关闭文件流并打开新流时,最好做以下事情:

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 /中创建的fstream对象(或第一种情况下的地址)调用它。

至于它是连续写还是最后写的更快,它实际上取决于你在while循环中执行的计算类型以及它的含量。放慢整个过程。但是,出于可靠性原因,如果程序在while循环执行期间因任何原因崩溃,有时最好连续写入以避免丢失所有数据。

答案 2 :(得分:0)

fstream对象已经被缓冲,因此添加到字符串对你没什么帮助,实际上,当超过先前分配的大小时,由于字符串内容的重新分配,甚至可能会失去性能。人们必须要测试才能知道。