Russian Qt Forum
Ноябрь 28, 2024, 20:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Методы оптимизации исходного кода  (Прочитано 4301 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Март 05, 2010, 09:35 »

Доброго времени суток!

Скажите, стоит ли оптимизировать это:
№1
Код:
void myFun()
{
...
qDebud() << "myFun() -> Error1. \n";
...
qDebud() << "myFun() -> Error2. \n";
...
qDebud() << "myFun() -> ErrorN. \n";
}

на:
№2
Код:
void myFun()
{
static const char[] dbgStr = "myFun() -> ";
...
qDebud() << dbgStr  << "Error1. \n";
...
qDebud() << dbgStr  << "Error2. \n";
...
qDebud() << dbgStr  << "ErrorN. \n";
}

И будет ли вообще при этом какая-либо "оптимизация" ? Хотя бы по скорости выполнения, т.к. при варианте №2 размер скомпилированного винарика получается больше чем при №1

Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #1 : Март 05, 2010, 09:55 »

Оптимизировать отладочный вывод? хм...
По поводу скорости достаточно посмотреть как это реализовано (если qDebud это что-то типа qDebug).
Код:
    inline QDebug &operator<<(const char* t) { stream->ts << QString::fromAscii(t); return maybeSpace(); }
Записан
Akaiten
Гость
« Ответ #2 : Март 05, 2010, 09:59 »

Стоит так "оптимизировать"  Смеющийся, только для того чтобы потом можно было легко сменить название "myFun()".
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Март 05, 2010, 10:50 »

Цитировать
Оптимизировать отладочный вывод? хм...
ДА! Улыбающийся
Цитировать
... (если qDebud это что-то типа qDebug).
ДА! Улыбающийся
Цитировать
Стоит так "оптимизировать"  Смеющийся, только для того чтобы потом можно было легко сменить название "myFun()".
Да просто лень копипаст делать, да и исходный код текст загромождает.

Вот думаю, может и вправду сделать как №2 ? Тем более, ИМХО, думаю, что при следующем вызове myFun() константа dbgStr уже будет создана и инициализирована, т.е. не нужно терять время на её создание. Хотя.. хз.
« Последнее редактирование: Март 05, 2010, 12:21 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #4 : Март 05, 2010, 11:50 »

Оптимизировать стоит то что действительно тормозит (является узким местом и зщанимает больше чем все остальное процессорного времени), а у вас тут скорее рефакторинг.

Кстати по поводу этого рефакторинга вывода отладочных сообщений - мы у себя применили тоакой подход

Код
C++ (Qt)
#ifndef __DEBUGLOG_H__
#define __DEBUGLOG_H__
 
#include <QDebug>
 
#define INFO_OUT (qDebug() << "<" << __FILE__ << __FUNCTION__ << ">")
 
#define WARNING_OUT (qWarning() << "<" << __FILE__ << __FUNCTION__ << ">")
 
#define ERROR_OUT (qCritical() << "<" << __FILE__ << __FUNCTION__ << ">")
 
void rtLogMessageOutput( QtMsgType type, const char * msg );
 
#endif // __DEBUGLOG_H__




Код
C++ (Qt)
#include "DebugLog.h"
 
void rtLogMessageOutput( QtMsgType type, const char * msg )
{
// Для раскраски вывода в консоль использованы ESC последовательности, как это будет работать в Windows не изветсно
// если ESC последовательности не будут корректно обрабатываться прийдется их сделать через #ifdef Q_OS_LINUX
// PS1 - переменная окружения определяющая строку запроса, вся информация по используемым ESC последовательностям
// может быть найдена в хелпе по ней
// PS1='\e[0m'    ------ сброс
// PS1='\e[31m'   ------ установка красного цвета текста
switch (type)
{
case QtDebugMsg:
fprintf(stdout, "(II): %s\n", msg);
break;
case QtWarningMsg:
fprintf(stdout, "\e[32m(WW): %s\e[0m\n", msg);
break;
case QtCriticalMsg:
fprintf(stdout, "\e[31m(EE): %s\e[0m\n", msg);
break;
case QtFatalMsg:
fprintf(stdout, "\e[41m(FATAL): %s\e[0m\n", msg );
abort();
}
}
 
/*
Set Display Attributes
Set Attribute Mode <ESC>[{attr1};...;{attrn}m
Sets multiple display attribute settings. The following lists standard attributes:
0 Reset all attributes
1 Bright
2 Dim
4 Underscore
5 Blink
7 Reverse
8 Hidden
 
Foreground Colours
30 Black
31 Red
32 Green
33 Yellow
34 Blue
35 Magenta
36 Cyan
37 White
 
Background Colours
40 Black
41 Red
42 Green
43 Yellow
44 Blue
45 Magenta
46 Cyan
47 White
*/

 


На раскраску консоли не обращайте внимания - я имею ввиду макросы

INFO_OUT
WARNING_OUT
ERROR_OUT

которые позволяют вывести ошибку или ворнинг - и сразу выводится в каком файле и методе! чтобы использовать достаточно
вызвать где-то в main.cpp

   qInstallMsgHandler( rtLogMessageOutput );

а потом писать в коде

INFO_OUT << "test message";
WARNINH_OUT << "test message";
ERROR_OUT << "test message";

P.S. под виндой раскраска не работает (пока не делалолсь)
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Март 05, 2010, 12:35 »

2 break,

спс.
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.114 секунд. Запросов: 22.