Desafío de alojamiento web
Debe recordar que ninguna de las opciones de configuración de la máquina está disponible si está alojado en un servidor compartido, como lo están muchos de nosotros (compañías más pequeñas e individuos).
ASP.NET MVC Overhead
Mi sitio tarda al menos 30 segundos cuando no ha sido golpeado en más de 20 minutos (y la aplicación web se ha detenido). Es terrible.
Otra forma de probar el rendimiento
Hay otra forma de probar si es el inicio de ASP.NET MVC u otra cosa. Coloque una página HTML normal en su sitio donde pueda acceder directamente.
Si el problema está relacionado con el inicio de ASP.NET MVC, la página HTML se reproducirá casi de inmediato incluso cuando la aplicación web no se haya iniciado.
Así fue como reconocí por primera vez que el problema estaba en el inicio de ASP.NET MVC. Cargué una página HTML en cualquier momento y se cargaría muy rápido. Luego, después de presionar esa página HTML, presioné una de mis URL ASP.NET MVC y recibí el mensaje de Chrome "Esperando raddev.us ..."
Otra prueba con script útil
Después de eso, escribí un script LINQPad (consulte http://linqpad.net para obtener más información) que llegaría a mi sitio web cada 8 minutos (menos del tiempo para que se descargue la aplicación, que debería ser de 20 minutos) y dejé Funcionó durante horas.
Mientras se ejecutaba la secuencia de comandos, llegué a mi sitio web y cada vez que mi sitio apareció increíblemente rápido. Esto me da una buena idea de que lo más probable es que la lentitud que estaba experimentando se debiera a los tiempos de inicio de ASP.NET MVC.
Obtenga LinqPad y puede ejecutar el siguiente script: simplemente cambie la URL a la suya y déjela ejecutar, y puede probar esto fácilmente. Buena suerte.
NOTA : En LinqPad, deberá presionar F4 y agregar una referencia a System.Net para agregar la biblioteca que recuperará su página.
TAMBIÉN : asegúrese de cambiar la variable URL de cadena para apuntar a una URL que cargará una ruta desde su sitio ASP.NET MVC para que el motor se ejecute.
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";
}
}