2

我的程序正在将大量(一次 250,000 个)uint16_t 写入文件。出于某种原因,设置 ios::out 标志(不必要,因为 VS2010 会自动设置它)会导致性能下降大约 10 倍。(见之前/之后)。知道设置可能导致如此巨大的性能差异的标志是什么吗?

前:

fileoutput.flags(ios::out); 

前

后:

//fileoutput.flags(ios::out);  

后

4

2 回答 2

5

flags应该用来设置流的格式标志,例如输出是左对齐还是右对齐,或者布尔值应该打印为数字或字符串,所以你不能用它来设置流的打开模式,实际调用fileoutput.flags(std::ios::out)是一个调用有一个无效的论点。错误的可能原因是您的实现值std::ios::out等于std::ios::unitbuf导致每次插入的缓冲区刷新,这肯定会导致巨大的性能损失。

于 2012-11-30T23:53:40.147 回答
3

flags 函数不设置一个标志。它一次更改所有标志。要修改一个标志,您应该使用 setf/unsetf。

于 2012-11-30T23:10:17.813 回答