увеличить буфер для cout - PullRequest
       16

увеличить буфер для cout

3 голосов
/ 26 августа 2011

Цитирование Влияет ли setbuf () на cout?

Я хочу увеличить размер буфера, чтобы улучшить производительность cout (это обычно перенаправляется на диск)

Могу ли я сделать:

std::cout.rdbuf()->pubsetbuf(some_buffer, buffer_size);

А также

ios::sync_with_stdio(false);

Имеет ли это смысл?

РЕДАКТИРОВАТЬ: Также я использую несколько потоков, поэтому я надеялся уменьшить необходимость синхронизации.

1 Ответ

4 голосов
/ 26 августа 2011

Я бы сначала проверил количество сбросов, которые сделают любой больший размер буфера ненужным.

Особенно посмотрите, если в вашем коде много cout << endl и попробуйте заменить их на cout << '\ n', если вам не нужен эффект очистки endl. </p>

В крайнем случае, прежде чем пытаться "оптимизировать", найдите основную причину, например, попробуйте использовать strace или аналогичный инструмент, чтобы увидеть количество системных вызовов, которые действительно происходят. (Надеюсь, это поможет вашей проблеме).

Только, если все это уже прослежено, больший размер буфера может реально помочь уменьшить количество системных вызовов.

Еще одним замедлением вывода cout является то, что он часто готов синхронизировать вывод с несколькими потоками, даже если вы используете только один поток. Это снова может сильно замедлить ввод-вывод из-за накладных расходов, когда больший буфер бесполезен.

...