Моя программа записывает в файл большие числа (250000 за раз) 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.