Сделайте так, чтобы приложение для моего компьютера загружалось / выходило быстрее - PullRequest
0 голосов
/ 17 февраля 2011

В настоящее время у меня есть однопоточное приложение с графическим интерфейсом на C ++ и Qt. Загрузка занимает 1 минуту (чтение с диска) и ~ 5 секунд (сохранение настроек, завершение соединений, ...).

Что я могу сделать, чтобы приложение работало быстрее?

Моей первой мыслью было создание серверного компонента приложения, который выполняет всю работу, а компонент графического интерфейса предназначен только для отображения. Связь осуществляется через сокет, канал или карту памяти. Это кажется излишним (с точки зрения усилий по разработке), поскольку мое приложение используется только горсткой людей.

Ответы [ 4 ]

5 голосов
/ 17 февраля 2011

Первый шаг - начать профилирование. Используйте реальный инструмент профилирования с минимальными издержками (например, в Linux вы можете использовать oprofile ), а не догадки. Что ваше приложение делает за одну минуту, необходимое для запуска? Можно ли отложить любую из этих работ на более поздний срок или, возможно, полностью пропустить?

Например, если вы загружаете, скажем, список шаблонов документов, вы можете отложить это до тех пор, пока пользователь не скажет вам создать новый документ. Если вы сканируете систему на наличие списка шрифтов, загрузите кэшированный список с момента последнего запуска и используйте его, пока не закончите обновление списка шрифтов в отдельном потоке. Это всего лишь примеры - используйте профилировщик, чтобы выяснить, где на самом деле идет время, а затем атакуйте код, начиная с самых больших временных цифр.

В любом случае, стоит помнить о некоторых наиболее эффективных подходах:

  • Пропустить работу, пока не понадобится. Если вы выполняете инициализацию некоторой функции, которая используется редко, пропустите ее, пока эта функция не будет фактически использована.
  • Отложите работу до запуска. Вы можете позаботиться о многих вещах в отдельном потоке, пока пользовательский интерфейс отзывчивый. Если вы собираете информацию, которая редко меняется, но требуется немедленно, рассмотрите возможность кэширования значения из предыдущего запуска, а затем обновите его в фоновом режиме.

На время выключения мгновенно скрывайте графический интерфейс пользователя, а затем проведите эти пять секунд, отключаясь в фоновом режиме. Пока пользователь не замечает работу, она также может быть мгновенной.

1 голос
/ 17 февраля 2011

Мне кажется, вы только догадываетесь, где все это время сжигается.«Чтение с диска» не будет первым в моем списке кандидатов.Узнайте больше о том, что на самом деле происходит .

Используйте приличный профилировщик.

1 голос
/ 17 февраля 2011

Вы можете использовать стандартную уловку, чтобы показать что-то интересное во время загрузки.

Как и во многих современных играх, покажите один или два совета во время загрузки

0 голосов
/ 17 февраля 2011

Профилирование, конечно, само собой разумеющееся.

Скорее всего, вы обнаружите, что ввод / вывод является существенным - чтение в ваших файлах запуска.Как отмечает Bdonlan, отсрочка работы является стандартной техникой.Google "ленивая оценка".

Вы также можете рассмотреть кеширование данных, которые не меняются.Сохраните кеш в более быстром формате, например, в двоичном.Это наиболее полезно, если вам случается иметь большой статический набор данных, считываемый во что-то вроде массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...