[Qt-interest] tips for optimising cold-start Qt application startup time on Windows (and OSX)?

Enrico Ros enrico.qt at email.it
Mon Apr 5 11:30:49 CEST 2010


You could try having 2 executables, the first displaying the native splash 
screen and the second doing the real job. Or a single executable fork()-ing or 
using a 2 stage startup so that the executable displays the splash screen and
then calls itself again with some command line parameter to start doing the 
real stuff.

Just my 2 cents (or less),
Enrico

On Monday 05 April 2010 07:36:08 Ross Bencina wrote:
> Hi Guys
> 
> I'm trying to work out how to speed up my Qt application startup time on
> Windows. I've done some research and profiling. Before I spend more time
> experimenting I'm wondering if anyone has had any success improving startup
> times by using  linker function order optimisation and/or rebasing/binding
> Qt DLLs? Any other suggestions would also be great :-).
> 
> I wanted to experiment with delay loading the Qt DLLs so I could display a
> native splash screen before incurring the load time, but this doesn't seem
> possible (see http://bugreports.qt.nokia.com/browse/QTBUG-8552).
> 
> My app only depends on QtCore.dll and QtGui.dll. I'm going to investigate
> on OSX also, so I'd be interested in tips for OSX too.
> 
> FYI, here's a summary of what I've found so far:
> 
> When comparing cold-start (first launch after reboot, app prefetcher
> disabled) to warm-start (subsequent starts) I notice the following
> differences:
> In total my app starts in 6 seconds from cold start, and under 2 seconds
> from warm start.
> - time to reach WinMain is about 2seconds on cold start, 70ms on warm start
> - creating the QApplication instance on cold start takes 334ms, whereas it
> takes 12ms from warm start. Similar costs are observed with constructing
> other top level Qt objects like my custom QStyle and main window.
> - time from launch to display splash screen (uses Qt) ~3.8seconds on cold
> start, 200ms on warm start.
> 
> These times were measured by storing QPC timestamps into a global trace
> buffer and writing to disk after startup was complete. Machine was a first
> gen dual core MacBook with a 7200rpm drive running WinXP Sp2.
> 
> I am assuming the 4 seconds of extra cold-start costs are mainly disk
> related due to paging in (Qt) DLLs and app code because they are not
> present on subsequent warm starts.
> 
> Profiling did show up some inefficiencies and unexpected costs in my
> application startup code. I can get some gains by optimising my application
> code and putting some CPU-bound startup operations into a separate thread,
> however a big part of the extra startup cost on cold start seems to be due
> to dll loading before my main() is called. If I had a way of deferring some
> of this cost I could get my CPU-bound work started earlier and mask some of
> the DLL load time.
> 
> Any thoughts appreciated!



More information about the Qt-interest-old mailing list