我的程序正在将uint16_t的大数字(一次250,000)写入文件。出于某种原因,设置ios :: out标志(不必要,因为VS2010会自动设置它)导致性能下降大约10倍。 (见前/后)。知道如何设置可能导致如此巨大性能差异的标志是什么意思?
在:
fileoutput.flags(ios::out);
后:
//fileoutput.flags(ios::out);
答案 0 :(得分:5)
flags
应该用于设置流的格式标志,例如输出是左对齐还是右对齐,或者布尔值应该打印为数字或字符串,因此您不能使用它来设置打开模式流和实际调用fileoutput.flags(std::ios::out)
是一个带有无效参数的调用。错误的可能原因是你的实现值std::ios::out
等于std::ios::unitbuf
导致每个插入的缓冲区刷新,这肯定会导致巨大的性能损失。
答案 1 :(得分:3)
flags函数不设置一个标志。它会立即更改所有标志。要修改一个标志,您应该使用setf / unsetf。