IIS is a demand-driven web server, i.e. IIS does things only when asked for. For example: an IIS worker process spawns up only when requests arrive for the sites that are hosted in this worker process. Without requests there isn't a worker process. This is great from a resource consumption point of view. Worker processes which don't run do not consume resources, memory in particular.
There is a drawback to this architecture however. The first requests that get handled by a newly spawned worker process might have to wait longer due to the initialization costs of the web application(s) living within the worker process. Typical example of initialization activities are:
- Initialization of data structures
- Loading data from a datastore into memory (caching)
- Compilation of code, e.g. .NET applications
- Establishing database connections
For big applications the initialization phase might take considerable time and IT administrators might not want their customers to pay the price for the initialization.
To fix this problem IIS 7.5, which ships as part of Windows Server 2008 R2 and Windows 7, comes with a new capability that allows the warm-up of initialization-heavy web applications.
The IIS Warm-Up module allows administrators or web application developers to configure a collection of URLs which will be executed before IIS accepts user requests for the web application in question. By executing the configured warm-up URLs data structures and caches will be initialized and requests arriving from the network will not experience any initialization delays.
More information and the download locations for the Application Warm-Up for IIS 7.5 can be found on http://www.iis.net/extensions/ApplicationWarmUp