Sfida di web hosting
È necessario ricordare che nessuna delle opzioni di configurazione della macchina è disponibile se si è ospitati su un server condiviso come lo sono molti di noi (piccole aziende e singoli).
ASP.NET MVC Overhead
Il mio sito impiega almeno 30 secondi quando non viene colpito da oltre 20 minuti (e l'app Web è stata interrotta). È terribile.
Un altro modo per testare le prestazioni
C'è un altro modo per testare se è il tuo avvio ASP.NET MVC o qualcos'altro. Rilascia una normale pagina HTML sul tuo sito dove puoi accedervi direttamente.
Se il problema è correlato all'avvio di ASP.NET MVC, la pagina HTML verrà visualizzata quasi immediatamente anche quando l'app Web non è stata avviata.
È così che ho riconosciuto per la prima volta che il problema era all'avvio di ASP.NET MVC. Ho caricato una pagina HTML in qualsiasi momento e si sarebbe caricato velocemente. Quindi, dopo aver colpito quella pagina HTML, ho colpito uno dei miei URL MVC ASP.NET e ho ricevuto il messaggio Chrome "Aspettando raddev.us ..."
Un altro test con script utili
Successivamente ho scritto uno script LINQPad (controlla http://linqpad.net per ulteriori informazioni) che dovrebbe colpire il mio sito Web ogni 8 minuti (meno del tempo necessario per scaricare l'app - che dovrebbe essere di 20 minuti) e ho lasciato funziona per ore.
Mentre la sceneggiatura era in esecuzione, ho colpito il mio sito Web e ogni volta che il mio sito si accendeva incredibilmente veloce. Questo mi dà una buona idea che molto probabilmente la lentezza che stavo vivendo era a causa dei tempi di avvio di ASP.NET MVC.
Ottieni LinqPad e puoi eseguire il seguente script: basta cambiare l'URL con il tuo e lasciarlo funzionare e puoi testarlo facilmente. In bocca al lupo.
NOTA : in LinqPad dovrai premere F4 e aggiungere un riferimento a System.Net per aggiungere la libreria che recupererà la tua pagina.
ANCHE : assicurati di modificare la variabile URL stringa in modo che punti a un URL che caricherà una route dal tuo sito ASP.NET MVC in modo che il motore venga eseguito.
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";
}
}