Webホスティングチャレンジ
私たちの多く(中小企業や個人)がそうであるように、共有サーバーでホストされている場合、マシン構成オプションはどれも利用できないことを覚えておく必要があります。
ASP.NETMVCオーバーヘッド
私のサイトは、20分以上ヒットしなかった(そしてWebアプリが停止した)場合、少なくとも30秒かかります。ひどいです。
パフォーマンスをテストする別の方法
それがASP.NETMVCの起動なのか、それとも他の何かなのかをテストする別の方法があります。通常のHTMLページをサイトにドロップして、直接ヒットできるようにします。
問題がASP.NETMVCの起動に関連している場合、Webアプリが起動されていなくても、HTMLページはほぼ即座にレンダリングされます。
このようにして、問題がASP.NETMVCの起動にあることを最初に認識しました。私はいつでもHTMLページをロードしましたが、それは非常に高速にロードされます。次に、そのHTMLページにアクセスした後、ASP.NET MVC URLの1つにアクセスすると、Chromeメッセージ「Waitingforraddev.us...」が表示されます。
役立つスクリプトを使用した別のテスト
その後、8分ごとに(アプリがアンロードされる時間よりも短い時間である20分)WebサイトにアクセスするLINQPad(詳細についてはhttp://linqpad.netを確認してください)スクリプトを作成しました。それは何時間も実行されます。
スクリプトの実行中に、私は自分のWebサイトにアクセスし、サイトが非常に速く起動するたびにアクセスしました。これにより、ASP.NETMVCの起動時間が原因で速度が低下した可能性が高いと考えられます。
LinqPadを入手すると、次のスクリプトを実行できます。URLを独自のものに変更して実行するだけで、これを簡単にテストできます。幸運を。
注:LinqPadでは、 F4キーを押し、System.Netへの参照を追加して、ページを取得するライブラリを追加する必要があります。
また、String URL変数を変更して、 ASP.NETMVCサイトからルートをロードするURLを指すようにしてください。これによりエンジンが実行されます。
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";
}
}