I just want to supplement what @paul said and agree that I was never able to get what Scott Guthrie said on his blog to fully function. Using:
<applicationPools>
<add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>
would get the Application Pool to preload after recycling (as exemplified by seeing the w3wp.exe process reload on recycling the application pool).
But I never was able to get the second part to work:
<sites>
<site name="MySite" id="1">
<application path="/" applicationPool="MyAppWorkerProcess" serviceAutoStartEnabled="true" />
</site>
</sites>
This may be because when using serviceAutoStartEnabled using serviceAutoStartProvider is also neccessary and that was just overkill for me since I simply wanted the Global.asax's Application_Start to be initialized.
Luckily, after reading this post and installing the Application Initialization Module and using this value in the Application configuration instead:
<sites>
<site name="MySite" id="1">
<application path="/" applicationPool="MyAppWorkerProcess" preloadEnabled="true" />
</site>
</sites>
I was able to see that Application_Start is being invoked during initialization. This turns my 10 second initial web service call into a 750 ms initial web service call. Using preloadEnabled is exactly what I needed. I hope it helps others as well.