Web Barındırma Zorluğu
Çoğumuz (küçük şirketler ve bireyler) kadar paylaşılan bir sunucuda barındırılıyorsanız, makine yapılandırma seçeneklerinden hiçbirinin kullanılamayacağını hatırlamanız gerekir.
ASP.NET MVC Ek Yükü
Sitem, 20 dakikadan fazla bir süredir isabet almadığında (ve web uygulaması durdurulduğunda) en az 30 saniye sürüyor. Bu korkunç.
Performansı Test Etmenin Başka Bir Yolu
ASP.NET MVC başlangıcınız mı yoksa başka bir şey mi olduğunu test etmenin başka bir yolu var. Sitenize doğrudan vurabileceğiniz normal bir HTML sayfası bırakın.
Sorun ASP.NET MVC'nin başlatılmasıyla ilgiliyse, web uygulaması başlatılmamış olsa bile HTML sayfası neredeyse anında işlenecektir.
Problemin ASP.NET MVC başlangıcında olduğunu ilk kez bu şekilde anladım. İstediğim zaman bir HTML sayfası yükledim ve çok hızlı yükleniyordu. Ardından, bu HTML sayfasına ulaştıktan sonra ASP.NET MVC URL'lerimden birine ulaşırdım ve Chrome'da "raddev.us bekleniyor ..." mesajını alırdım.
Yararlı Komut Dosyası İçeren Başka Bir Test
Bundan sonra bir LINQPad yazdım ( http://linqpad.net adresine bakın) web siteme her 8 dakikada bir (uygulamanın kaldırılma süresinden daha az - bu 20 dakika olmalıdır) vuracak daha fazlası için : bakın) komut dosyası yazdım ve saatlerce çalışır.
Komut dosyası çalışırken web siteme girdim ve sitem her defasında son derece hızlı çıktı. Bu bana, yaşadığım yavaşlığın büyük olasılıkla ASP.NET MVC başlatma sürelerinden kaynaklandığı konusunda iyi bir fikir veriyor.
LinqPad'i alın ve aşağıdaki komut dosyasını çalıştırabilirsiniz - URL'yi kendi başınıza değiştirin ve çalışmasına izin verin ve bunu kolayca test edebilirsiniz. İyi şanslar.
NOT : LinqPad'de , sayfanızı alacak kitaplığı eklemek için F4'e basmanız ve System.Net'e bir referans eklemeniz gerekir.
AYRICA : Dize URL değişkenini, motorun çalışması için ASP.NET MVC sitenizden bir yol yükleyecek bir URL'yi gösterecek şekilde değiştirdiğinizden emin olun.
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";
}
}