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