Автор
|
Тема: Что быстрее работает: printf или cout?
|
AdminDimon |
опубликован 16-02-2002 18:57 MSK
Привет! Пишу консольку шлюза для сообщений от клиентов. По каждому принятому/переданному сообщению отображаю в консоль при помощи printf соответствующее сообщение. При большом трафике начинает жрать CPU и memory. Сделал следующее: a) предусмотрел входной параметр для отключения трейсов; b) предусмотрел входной параметр для перенаправления выдачи в файл - проверено, жрет ресурсов значительно меньше. Вопросы: 1) Может cout жрет меньше ресурсов? 2) Как после того, как я перенаправил выдачу в файл, перенаправить ее обратно на экран? Заранее спасибо за ответ.
|
Muran
|
опубликован 16-02-2002 20:52 MSK
Попробуй на прямую копировать в буфер экрана. Это вроде побыстрее. Но printf круче cout, хота и не удобен. |
Kosha
|
опубликован 18-02-2002 00:26 MSK
Кто круче? Принтф? В смысле быстрее? Ну вы блин даете... |
Flex Ferrum
|
опубликован 18-02-2002 02:50 MSK
Проблема не в printf/cout, а в том, что при выводе на консоль больших объемов информации NT жутко тормозит - сам кучу раз сталкивался.muran: printf не круче cout. В cout реализовано тоже самое, но другими методами. |
Strelok
|
опубликован 18-02-2002 06:42 MSK
printf работает намного лучше в циклах, так как сразу же выводит данные на экран. В cout же данные буферизируются и выводятся большими "порциями". Если ты используешь цикл, и тебе надо выводить в нем данные, используй printf. Если будешь использовать cout, у тебя будут большие задержки с выводом информации - проверено. Лично я использую в любом случай printf, но это дело привычки.Удачи! |
the_moon
|
опубликован 18-02-2002 08:35 MSK
printf тоже буферизирует вывод данных, так что без разницы. А тормоза связвны с особенностями вывода на экран. И это везде на любом компьютере так, из за видео системы-непосредственное копирование в активную страницу занимает очень много времени. Так что всегда было если скорость программы критична, то вывод трассировки лучше направить в файл или в /dev/null. |
ADK
|
опубликован 18-02-2002 00:11 MSK
Реализация printf из-за передачи в стек переменного числа параметров более медленная, но тормоза возникают не из-за этого... |
AdminDimon
|
опубликован 18-02-2002 19:41 MSK
Привет! Большое спасибо всем! С большим интересом прочитал. Слышал звон, что printf работает с буферизацией данных а cout - без оной.Дело в том, что при выводе в файл printf похоже пишет в буфер и при некорректном выходе из програмы файл остается пустой. Приходится использовать формат cout << "отображаемая информация " << переменная << "\n" << flush; В этом случае при любом выходе из программы получаю заполненный файл. Но работает все это медленнее. Поэтому и возникла делема. Спасибо за ответы! |
Flex Ferrum
|
опубликован 18-02-2002 20:30 MSK
AdminDimon: Рекомендую тебе вместо << "\n" << flush; написать << endl; Манипулятор endl посылает в поток возврат коретки и делает flush. Вернувшись к буферизации можно отметить следующее: буферизируют и cout и printf, причем примерно один и тот-же объем данных :)) И буферизируют до тех пор, пока не встретится символ возврата каретки (для printf) или манипулятора endl (для cout) - после этого буферы сбрасываются. |
the_moon
|
опубликован 19-02-2002 13:41 MSK
открыть логфайл с самого начала, "глобально", обернуть все последующие вызовы в try - catch по catchу закрыть файл |
m
|
опубликован 24-02-2002 07:24 MSK
напиши свою функцию вывода и используй в ней puts(); или putchar(); если нужно перенаправлять вывод или putch(); только на консоль (по быстрее будет). на порядок быстрее чем cout и printf! |