Секреты и интересные возможности Qt |
Здравствуйте, гость ( Вход | Регистрация )
Секреты и интересные возможности Qt |
SABROG |
20.6.2009, 15:02
Сообщение
#51
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Немного про нормализацию сигнатур. Мое внимание привлекло требование о необходимости нормализовывать все сигнатуры прежде чем использовать connect при изменении исходников Qt.
Нормализация представляет собой парсинг строки, уменьшение её длинны путем удаления лишних пробельных символов. Перестановка ключевых слов для оптимизации поиска нужного сигнала или слота у QObject'a. Подобный разбор происходит каждый раз, когда мы используем connect. Макросы SIGNAL() и SLOT() не дают нам нормализованную строку, они нам дают просто строку типа:
После нормализации (QObject::normalizeSignature()) видно, что один пробел пропал:
И т.п. В составе Qt появилась утилита /util/normalize, она пробегается по исходникам и заменяет макросы SIGNAL()/SLOT() на нормализованные сигнатуры, что сказывается на скорости соединения сигналов и слотов. Вероятно, в программах, где идет постоянное соединение/разъединение это помогло бы немного выйграть в скорости. P.S.: однако мне не понятно, почему тролли не изменили moc компилятор таким образом, чтобы это делалось всегда на автомате. Сообщение отредактировал SABROG - 20.6.2009, 16:59 |
|
|
SABROG |
28.6.2009, 13:52
Сообщение
#52
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Пользователи Qt, которые собирают свои приложения с помощью компилятора gcc наверняка замечали, что при компиляции их приложений используется ключ оптимизации -O2. В первую очередь это связано с тем, что сама библиотека Qt собранная с ключем оптимизации -O3 ведет себя не стабильно. Однако никто вам не запрещает иметь библиотеку Qt собранную с оптимизацией -O2, а вашу программу с оптимизацией -O3 или любой другой. Однако ключи компилятора прописаны в одном из spec файлов. К тому же не удобно каждый раз лезть в исходники Qt и что-то там менять глобально для всех приложений. Я нашел несколько иной выход, это замена ключей компилятора на свои прямо в .pro файле:
Таким образом наша программа может быть собрана с максимальной оптимизацией, нужно лишь изменить значение переменной OPTIMIZE. К тому же это может быть полезным на этапе проектирования приложения. В больших проектах release сборка может собираться десятками минут. Конечно можно собирать только debug, но случаи бывают разными. Поэтому, чтобы уменьшить время компиляции релизных сборок можно отключить для них оптимизацию совсем (OPTIMIZE += 0). Когда, по мнению автора, программа будет готова к выпуску в свет - оптимизацию можно включить обратно. И конечно никто вам не запрещает на свой страх использовать тонкую настройку под разные платформы:
|
|
|
Litkevich Yuriy |
28.6.2009, 14:28
Сообщение
#53
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
-O3 на самом деле не макисальная, а альтернативная оптимизация, и может существенно проигрывать -O2, это и в руководстве по GCC написано и по моей практике так.
Есть ещё -Os - оптимизация по размеру, жмёт основательно, я в контроллерах такую использую. |
|
|
AD |
28.6.2009, 15:04
Сообщение
#54
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
0x - полная автоматизация. Ее ведь тоже можно использовать?
|
|
|
Litkevich Yuriy |
28.6.2009, 15:27
Сообщение
#55
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
AD |
28.6.2009, 16:19
Сообщение
#56
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
trdm |
28.6.2009, 16:45
Сообщение
#57
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
Не такая уж и опечатка, у человека правильно мозги повернуты
автоматизация в некоторых случаях дает оптимизацю |
|
|
AD |
28.6.2009, 17:25
Сообщение
#58
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Не такая уж и опечатка, у человека правильно мозги повернуты автоматизация в некоторых случаях дает оптимизацю Спасибо, конечно. Но в данном, конкретном случае эти ключики могут дать только оптимизацию! Сомневаюсь, что они могут повысить автоматизированность системы! Потому это действительно была опечатка! |
|
|
SABROG |
6.7.2009, 13:39
Сообщение
#59
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
__fastcall в стиле Qt. В Delphi и MSVC есть аттрибут для функций __fastcall, который позволяет вызывать функции быстрее, т.к. при передаче параметров используются регистры eax, edx и ecx. К сожалению в связи с этим есть некоторые ограничения. Параметров может быть 3 и все они должны иметь целочисленный тип (4 байта). Например:
Чтобы использовать макрос QT_FASTCALL нужно подключить заголовок:
Само объявление макроса выглядит так:
Сообщение отредактировал SABROG - 6.7.2009, 14:53 |
|
|
SergSh |
27.8.2009, 9:49
Сообщение
#60
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 27.8.2009 Пользователь №: 1024 Спасибо сказали: 3 раз(а) Репутация: 0 |
QListView при инициализации считывает все строки для определения размеров.
На больших наборах данных это очень существенные затраты времени. Чтобы этого не происходило достаточно воспользоваться setGridSize(). Правда у меня осталась другая проблема - предельное количество строк, которое может отобразить QlistVIew - 134217724 Это огранечиние класса QVector. При этом объем, занимаемый приложением в памяти 520Mb. Получил на форуме прикольный номер пользователя - килобайт |
|
|
Текстовая версия | Сейчас: 30.11.2024, 7:10 |