Depending on your configuration the Application Pool assigned to your ASP.net application the AppPool will recycle at a certain time of day, or after a certain number of requests. Once this happens it forces ASP.net to recompile the site. There is a good overview on ASP.net compilation on MSDN.
There are also several questions on StackOverfolow:
There are two steps that I use to make this better:
- If possible try to avoid recycling the application pool at a time that someone is going to be using the site. You should be able to identify this by using Google Analytics or another traffic logging package.
- Setup something to hit your website shortly after your Application Pool has recycled, I use PolyMon extensively for my on-site servers, so I have a monitor that checks the site is healthy every 5 minutes which does this job for me. I have used SPWakeUp for SharePoint sites, which could probably be adapted for any ASP.net site.
As an example, if you were able to identify that your site is rarely used at 0200 you could configure your Application Pool as follows (IIS Config -> Right Click the AppPool -> Click "Recycling..."):
The above dialog is from Windows 7, however I don't think the dialog has changed vastly between Windows 2008 and Windows 7/2007 R2.