We've had this issue with all our Sitefinity sites, the first hit takes a long time for the site to get going. What we've done to combat this is run a task in task scheduler every five minutes that runs a C# exe which sends off a web request to each site:
static void Main(string[] args)
{
var sitefinitySites = new List<Uri>
{
new Uri("http://www.example.com")
};
using (var client = new WebClient())
{
foreach (var site in sitefinitySites)
{
try
{
client.DownloadString(site);
}
catch (WebException ex)
{
//send an email or something because the site might be down
}
}
}
}