Wyzwanie hostingowe
Musisz pamiętać, że żadna z opcji konfiguracji maszyny nie jest dostępna, jeśli jesteś hostowany na serwerze współdzielonym, jak wielu z nas (mniejsze firmy i osoby prywatne).
Narzut ASP.NET MVC
Moja witryna zajmuje co najmniej 30 sekund, jeśli nie została wyświetlona od ponad 20 minut (a aplikacja internetowa została zatrzymana). To jest okropne.
Inny sposób testowania wydajności
Istnieje inny sposób sprawdzenia, czy jest to uruchomienie ASP.NET MVC, czy coś innego. Upuść zwykłą stronę HTML w swojej witrynie, na którą możesz trafić bezpośrednio.
Jeśli problem jest związany z uruchomieniem ASP.NET MVC, strona HTML zostanie renderowana prawie natychmiast, nawet jeśli aplikacja internetowa nie została uruchomiona.
W ten sposób po raz pierwszy rozpoznałem, że problem tkwi w starcie ASP.NET MVC. Załadowałem stronę HTML w dowolnym momencie i ładowała się błyskawicznie. Następnie po wejściu na tę stronę HTML trafiałem na jeden z moich adresów URL ASP.NET MVC i otrzymałem komunikat Chrome „Oczekiwanie na raddev.us ...”
Kolejny test z pomocnym skryptem
Następnie napisałem skrypt LINQPad (sprawdź http://linqpad.net po więcej), który będzie trafiał na moją stronę internetową co 8 minut (mniej niż czas na rozładowanie aplikacji - który powinien wynosić 20 minut) i pozwoliłem działa godzinami.
Podczas działania skryptu trafiałem na moją witrynę internetową i za każdym razem moja witryna wyświetlała się niesamowicie szybko. To daje mi dobre wyobrażenie, że najprawdopodobniej spowolnienie, którego doświadczyłem, było spowodowane czasami uruchamiania ASP.NET MVC.
Pobierz LinqPad i uruchom następujący skrypt - po prostu zmień adres URL na własny i pozwól mu działać, a możesz to łatwo przetestować. Powodzenia.
UWAGA : W LinqPad musisz nacisnąć F4 i dodać odwołanie do System.Net, aby dodać bibliotekę, która pobierze twoją stronę.
TAKŻE : upewnij się, że zmienisz zmienną String URL, aby wskazywała na adres URL, który będzie ładował trasę z witryny ASP.NET MVC, aby silnik działał.
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
{
String finalHtml = GetWebContent();
if (counter < 1)
{
Console.WriteLine(finalHtml);
}
counter++;
}
finally
{
webKeepAlive.Interval = 480000;
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";
}
}