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