none
Cold Startup Issue in Windows 7 RRS feed

  • Question

  • My team had developed a Windows Forms based client application. The application had cold startup issue with Windows XP whereas in Vista the cold and warm startup time was similar. We thought that the .NET application does not exibhit cold startup issue in Windows Vista. With Windows 7, we were assuming that the startup time would have decreased as we have read the Windows 7 is faster that Vista. Alas, on measuring the startup of application we found that the application exhibits the same cold startup issue as in Windows 7. The application takes around 35 seconds in cold startup in XP and Win7 whereas it takes less than 15 seconds in warm startup. For Vista both numbers are around 14 seconds.

    Could some body help me understand what has change in Win7 that brings us back to Windows XP startup performance?

    Friday, January 8, 2010 1:17 PM

Answers

  • The short answer: I don't think there's anything in Win7 that would bring you 'back' to WinXP startup performance. I think what you see on Vista is affected by external factors which cause that you are not really measuring cold startup on Vista.

    The long answer:
    Cold startup should be always slower than warm startup. When using .NET, it will most likely be measurable (difference in couple of seconds at least). I bet that your Vista installation either uses some .NET application/components before you measure the cold startup or some Windows SuperFetch-like feature kicks in and therefore you are getting the same results for cold and warm startup on Vista - because you always measure the warm startup in fact.
    What affects cold startup are Windows features like PreFetch, SuperFetch and ReadyBoost. It depends on their implementation how smart OS will be to load .NET DLLs into cache earlier than they are used. If you want to get stable measurements, turn all these features off. If you want to measure the real thing with these features on, then don't be suprised that the results are different for various OS versions, because now you are measuring quality of those features in Windows as well.

    This is how one should measure cold startup: You should turn off all antiviruses, runtime checks and cold-starup affecting Windows features (SuperFetch, etc.), turn off all applications running at startup, turn off the computer, turn it back on, wait couple of minutes for everything to start, check activity of the processors, then measure the startup.
    Also make sure that:
      - None .NET code runs at Windows startup (you can use e.g. ProcessMonitor to confirm that).
      - You are measurring exactly the same .NET version on all Windows machines - check FileVersion of %WinDir%\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll. For example 3.5 SP1 version od mscorwks.dll (2.0.50727.3053) had some cold-startup improvements over previous versions.
      - Check that your app is installed properly on all machines - e.g. check that NGEN images are used the same way accross all OS versions you use to measure.

    -Karel

    • Marked as answer by Avinash Tiwari Tuesday, January 12, 2010 12:09 PM
    Friday, January 8, 2010 5:21 PM
    Moderator

All replies

  • The short answer: I don't think there's anything in Win7 that would bring you 'back' to WinXP startup performance. I think what you see on Vista is affected by external factors which cause that you are not really measuring cold startup on Vista.

    The long answer:
    Cold startup should be always slower than warm startup. When using .NET, it will most likely be measurable (difference in couple of seconds at least). I bet that your Vista installation either uses some .NET application/components before you measure the cold startup or some Windows SuperFetch-like feature kicks in and therefore you are getting the same results for cold and warm startup on Vista - because you always measure the warm startup in fact.
    What affects cold startup are Windows features like PreFetch, SuperFetch and ReadyBoost. It depends on their implementation how smart OS will be to load .NET DLLs into cache earlier than they are used. If you want to get stable measurements, turn all these features off. If you want to measure the real thing with these features on, then don't be suprised that the results are different for various OS versions, because now you are measuring quality of those features in Windows as well.

    This is how one should measure cold startup: You should turn off all antiviruses, runtime checks and cold-starup affecting Windows features (SuperFetch, etc.), turn off all applications running at startup, turn off the computer, turn it back on, wait couple of minutes for everything to start, check activity of the processors, then measure the startup.
    Also make sure that:
      - None .NET code runs at Windows startup (you can use e.g. ProcessMonitor to confirm that).
      - You are measurring exactly the same .NET version on all Windows machines - check FileVersion of %WinDir%\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll. For example 3.5 SP1 version od mscorwks.dll (2.0.50727.3053) had some cold-startup improvements over previous versions.
      - Check that your app is installed properly on all machines - e.g. check that NGEN images are used the same way accross all OS versions you use to measure.

    -Karel

    • Marked as answer by Avinash Tiwari Tuesday, January 12, 2010 12:09 PM
    Friday, January 8, 2010 5:21 PM
    Moderator
  •  

    Hi Avinash,

    I'm writing to check whether your issue has been resolved, is Karel's suggestion helpful?


    Sincerely,
    Eric

    Please remember to mark helpful replies as answers.
    Tuesday, January 12, 2010 1:50 AM