Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2011, 04:47   #21
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Ну а я, покопавшись, выяснил, что WriteFile вызывает прямо WriteConsole, а хендл проще получить через GetStdHandle. И скорость можно увеличить, не используя перемещение курсора, а нагло через WriteConsoleOutputCharacter.
EUGY вне форума Ответить с цитированием
Старый 17.07.2011, 04:54   #22
TDrive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 95
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Но даже за 1 минуты и 23 секунды нет никакой возможности успеть прочесть 1000000 строк. Действительно ли есть необходимость выводить все эти строки на консоль? Ведь Если количество строк так велико, что это начинает сказываться на производительности программы, то есть ли смысл в высокой скорости вывода? Ведь никто не успеет ничего прочесть.
топикстартер не говорит что он за программу пишет)
может какую нибудь консольную графику с обновление 24 раза в секунду.

а вообще оптимизировать программу в сторону количества выводимой информации хорошая идея.
TDrive вне форума Ответить с цитированием
Старый 17.07.2011, 05:00   #23
TDrive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 95
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Ну а я, покопавшись, выяснил, что WriteFile вызывает прямо WriteConsole, а хендл проще получить через GetStdHandle. И скорость можно увеличить, не используя перемещение курсора, а нагло через WriteConsoleOutputCharacter.
а можешь исходник показать как hello world будет выглядеть с этими функциями?
TDrive вне форума Ответить с цитированием
Старый 17.07.2011, 05:08   #24
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Код:
	HANDLE hfile = GetStdHandle(STD_OUTPUT_HANDLE);
	char buf[16];
	DWORD wrtn;
	COORD crd = {3,5};
	DWORD stm1  = GetTickCount();
	for (int i = 100000; i--;){
		int sz = wsprintf(buf,"%d", i);
		WriteConsoleOutputCharacter(hfile, buf, sz, crd, &wrtn);
	}
	stm1 = GetTickCount() - stm1;
EUGY вне форума Ответить с цитированием
Старый 17.07.2011, 05:23   #25
TDrive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 95
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Код:
	HANDLE hfile = GetStdHandle(STD_OUTPUT_HANDLE);
	char buf[16];
	DWORD wrtn;
	COORD crd = {3,5};
	DWORD stm1  = GetTickCount();
	for (int i = 100000; i--;){
		int sz = wsprintf(buf,"%d", i);
		WriteConsoleOutputCharacter(hfile, buf, sz, crd, &wrtn);
	}
	stm1 = GetTickCount() - stm1;
вынес int sz = wsprintf(buf,"%d", i); из цикла и исправил на int sz = wsprintf(buf,"test");
увеличил int i до 1000000.

22 секунды.

тут и координаты куда выводить текст можно указывать, круто получилось)

Последний раз редактировалось TDrive; 17.07.2011 в 05:33.
TDrive вне форума Ответить с цитированием
Старый 17.07.2011, 05:32   #26
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

22 секунды на линукс?
EUGY вне форума Ответить с цитированием
Старый 17.07.2011, 05:36   #27
TDrive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 95
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
22 секунды на линукс?
нет на вин7
в 4 раза быстрее стал) на линукс лень перезагружаться.

по идеи ещё координаты нужно высчитывать что бы "test" не друг на друга печатались а в строчку (чтоб соответствовало cout) но это пофиг по координатам даже удобнее.
я этот сырец себе в коллекцию отложу чтоб не потерять) полезная штука)

Последний раз редактировалось TDrive; 17.07.2011 в 05:41.
TDrive вне форума Ответить с цитированием
Старый 17.07.2011, 05:40   #28
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

у меня на win7 ~ 45 сек.
Пора выбрасывать комп.)
EUGY вне форума Ответить с цитированием
Старый 17.07.2011, 08:43   #29
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Но даже за 1 минуты и 23 секунды нет никакой возможности успеть прочесть 1000000 строк. Действительно ли есть необходимость выводить все эти строки на консоль? Ведь Если количество строк так велико, что это начинает сказываться на производительности программы, то есть ли смысл в высокой скорости вывода? Ведь никто не успеет ничего прочесть.
Даже монитор не сможет так быстро обновлять изображение Но тут вопрос в другом - насколько быстро работают функции вывода на консоль.

PS. Win7 6,5 сек последний вариант
An1ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват вывода Яр|/||< (^_^) Win Api 5 02.02.2011 23:08
спецификатор формата вывода функции printf Айат Помощь студентам 3 21.02.2010 13:12
Ошибка в функции вывода новостей smn1 PHP 2 07.09.2009 08:09
ограничение вывода Interfere Общие вопросы C/C++ 2 07.05.2009 21:00
Вид вывода в С++ Rembo Общие вопросы C/C++ 4 04.01.2008 20:40