Desafio de hospedagem na web
Lembre-se de que nenhuma das opções de configuração da máquina estará disponível se você estiver hospedado em um servidor compartilhado, como muitos de nós (empresas e indivíduos menores).
Sobrecarga do ASP.NET MVC
Meu site leva pelo menos 30 segundos quando não é acessado em mais de 20 minutos (e o aplicativo Web foi interrompido). Isto é terrível.
Outra maneira de testar o desempenho
Há outra maneira de testar se é a inicialização do ASP.NET MVC ou outra coisa. Solte uma página HTML normal em seu site, onde você pode acessá-la diretamente.
Se o problema estiver relacionado à inicialização do ASP.NET MVC, a página HTML será renderizada quase imediatamente, mesmo quando o aplicativo Web não tiver sido iniciado.
Foi assim que reconheci que o problema estava na inicialização do ASP.NET MVC. Carreguei uma página HTML a qualquer momento e ela carregaria rapidamente. Depois de acessar a página HTML, eu atingia um dos meus URLs do ASP.NET MVC e recebia a mensagem do Chrome "Aguardando raddev.us ..."
Outro teste com script útil
Depois disso, escrevi um script LINQPad (confira http://linqpad.net para saber mais) que acessaria meu site a cada 8 minutos (menos do que o tempo para o aplicativo descarregar - que deve ser de 20 minutos) e deixei funciona por horas.
Enquanto o script estava sendo executado, eu acessava meu site e toda vez que ele aparecia rapidamente. Isso me dá uma boa idéia de que provavelmente a lentidão que eu estava enfrentando era devido aos tempos de inicialização do ASP.NET MVC.
Obtenha o LinqPad e você poderá executar o script a seguir - basta alterar o URL para seu próprio país, deixá-lo executar e você pode testar isso facilmente. Boa sorte.
NOTA : No LinqPad, você precisará pressionar F4 e adicionar uma referência ao System.Net para adicionar a biblioteca que recuperará sua página.
TAMBÉM : certifique-se de alterar a variável URL da String para apontar para uma URL que carregará uma rota do site ASP.NET MVC para que o mecanismo seja executado.
System.Timers.Timer webKeepAlive = new System.Timers.Timer();
Int64 counter = 0;
void Main()
{
webKeepAlive.Interval = 5000;
webKeepAlive.Elapsed += WebKeepAlive_Elapsed;
webKeepAlive.Start();
}
private void WebKeepAlive_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
webKeepAlive.Stop();
try
{
// ONLY the first time it retrieves the content it will print the string
String finalHtml = GetWebContent();
if (counter < 1)
{
Console.WriteLine(finalHtml);
}
counter++;
}
finally
{
webKeepAlive.Interval = 480000; // every 8 minutes
webKeepAlive.Start();
}
}
public String GetWebContent()
{
try
{
String URL = "http://YOURURL.COM";
WebRequest request = WebRequest.Create(URL);
WebResponse response = request.GetResponse();
Stream data = response.GetResponseStream();
string html = String.Empty;
using (StreamReader sr = new StreamReader(data))
{
html = sr.ReadToEnd();
}
Console.WriteLine (String.Format("{0} : success",DateTime.Now));
return html;
}
catch (Exception ex)
{
Console.WriteLine (String.Format("{0} -- GetWebContent() : {1}",DateTime.Now,ex.Message));
return "fail";
}
}