По некоторым причинам мне очень важна скорость вывода различных строк и символов на экран консоли, в связи с чем задумался об использовании какой-либо конкретной функции.
Разумеется, std::cout в этом случае, я думаю, лучше не использовать.
Проверил скорость выполнения printf ("%c", ch) и putchar (ch) — оказалось, что первый способ работает быстрее. Почему? Ведь putchar не должен разбирать формат строки.
Вместо printf для константных строк, я думаю, лучше будет использовать puts, да?
Здравствуйте, YourLastSong, Вы писали:
YLS>Здравствуйте, уважаемые господа.
YLS>По некоторым причинам мне очень важна скорость вывода различных строк и символов на экран консоли, в связи с чем задумался об использовании какой-либо конкретной функции.
YLS>Разумеется, std::cout в этом случае, я думаю, лучше не использовать.
YLS>Проверил скорость выполнения printf ("%c", ch) и putchar (ch) — оказалось, что первый способ работает быстрее. Почему? Ведь putchar не должен разбирать формат строки.
YLS>Вместо printf для константных строк, я думаю, лучше будет использовать puts, да?
YLS>Что ещё можно использовать в данном случае?
YLS>Заранее благодарю за возможные ответы.
Если важна именно скорость вывода строк на консоль, тогда printf. Правда, читать эти строки врядли кто успеет. А если важна скорость работы программы, которая выдает эти строки, тогда нужно писать эти строки в очередь, а нить с приоритетом ниже базового пускай извлекает эти строки на консоль.
Здравствуйте, YourLastSong, Вы писали:
YLS>Проверил скорость выполнения printf ("%c", ch) и putchar (ch) — оказалось, что первый способ работает быстрее. поведайте нам ваши результаты, тесты и все такое
очень интересно узнать какую разницу вы нашли для одного символа
А оно точно надо? Любое разумное количество текста замечательно пролезет и через cout, а просто чтобы что-то на экране помелькало/нарисовалось — тут уже пора смотреть в сторону WriteConsoleOutput/ncurses.
W>А оно точно надо? Любое разумное количество текста замечательно пролезет и через cout, а просто чтобы что-то на экране помелькало/нарисовалось — тут уже пора смотреть в сторону WriteConsoleOutput
А почему именно WriteConsoleOutput? Пользовался только неск. раз, может чего-то не понимаю.
Да, надо, пожалуй. Сможете сказать, что быстрее работает всё же?
YLS>А почему именно WriteConsoleOutput? Пользовался только неск. раз, может чего-то не понимаю.
WriteConsoleOutput — это если скоростной вывод текста понадобился чтобы что-то "рисовать" символами на экране консоли. Она именно для такого рисования и предназначена.
YLS>Да, надо, пожалуй. Сможете сказать, что быстрее работает всё же?
Все printf-ы, putch-и и им подобные рано или поздно вызывают WriteFile/WriteConsole. Разница разве что в том как часто они Enter/LeaveCriticalSection дергают (например, putch — на каждый вызов) или там перекодируют текст. Подробности — в исходниках CRT, которые ставятся со студией (сегодня впервые посмотрел как у них сделан write() — там не стесняются посимвольно перекодировать выводимый на консоль текст, а я-то до последнего надеялся что это просто примитивная обертка над WriteFile). Однако по сравнению с собственно отрисовкой выводимого текста разница в затратах на его обработку несущественна.
Получается следующее — если цель — что-то рисовать, то для этого есть специальные функции; если надо просто вывести текстовку — подойдет любой способ, который больше нравится, от потоков c++ до WriteFile, причем хоть собирать текст в буфер и скармливать WriteFile и будет быстрее всего, но разницей в скорости можно пренебречь; а вот если срочно надо прокачать через консоль мегабайты текста(на меньших объемах различия в скорости на глаз не определить) и узкое место — именно скорость его передачи, то вопрос прежний — "а оно точно надо?"
W>WriteConsoleOutput — это если скоростной вывод текста понадобился чтобы что-то "рисовать" символами на экране консоли. Она именно для такого рисования и предназначена.
Она ведь из .NET?
Я, наверное, говорю непр., но разве для использования WriteConsoleOutput и других функций .NET, у пользователя не должно что-то отдельное быть установлено?
Извиняюсь, просто раньше их практически не использовал.
Здравствуйте, YourLastSong, Вы писали:
YLS>По некоторым причинам мне очень важна скорость вывода различных строк и символов на экран консоли, в связи с чем задумался об использовании какой-либо конкретной функции.
При выводе на консоль самые тормоза заключаются в скроллинге консоли. Лучший способ ускорить длительную операцию, которая по ходу дела вываливает в консоль тонны диагностики — перенаправить эту самую диагностику в /dev/null.
C>При выводе на консоль самые тормоза заключаются в скроллинге консоли. Лучший способ ускорить длительную операцию, которая по ходу дела вываливает в консоль тонны диагностики — перенаправить эту самую диагностику в /dev/null
Здравствуйте, YourLastSong, Вы писали:
W>>WriteConsoleOutput — это если скоростной вывод текста понадобился чтобы что-то "рисовать" символами на экране консоли. Она именно для такого рисования и предназначена.
YLS>Она ведь из .NET?
YLS>Я, наверное, говорю непр., но разве для использования WriteConsoleOutput и других функций .NET, у пользователя не должно что-то отдельное быть установлено?
YLS>Извиняюсь, просто раньше их практически не использовал.
Здравствуйте, YourLastSong, Вы писали:
YLS>Не подскажете, как это сделать?
my_prog.exe > output.txt
заметно шустрее работает, нежели при выводе текста в консоль