虚拟主机挑战
您必须记住,如果您像我们中的许多人(小型公司和个人)一样托管在共享服务器上,则没有任何机器配置选项可用。
ASP.NET MVC开销
当我的网站在20分钟内没有被点击(并且该网络应用已停止)时,至少需要30秒。这很糟糕。
测试性能的另一种方法
还有另一种方法来测试它是您的ASP.NET MVC启动还是其他。在您的网站上放一个普通的HTML页面,您可以直接点击它。
如果问题与ASP.NET MVC启动有关,则HTML页将几乎立即呈现,即使尚未启动Web应用程序也是如此。
这就是我最初认识到问题出在ASP.NET MVC启动中的方式。我可以随时加载HTML页面,而且加载速度很快。然后,在访问该HTML页面后,我访问了我的ASP.NET MVC URL之一,并且得到了Chrome消息“ Waiting for raddev.us ...”。
另一个有用脚本的测试
之后,我编写了一个LINQPad(更多信息,请访问http://linqpad.net)脚本,该脚本每8分钟(少于应用程序的卸载时间-应该是20分钟)访问我的网站一次,它运行了几个小时。
当脚本运行时,我访问了我的网站,每次我的网站运行起来都非常快。这给了我一个好主意,我最可能遇到的速度缓慢是由于ASP.NET MVC启动时间。
获取LinqPad,您可以运行以下脚本-只需将URL更改为您自己的URL,然后使其运行即可轻松进行测试。祝好运。
注意:在LinqPad中,您需要按F4并添加对System.Net的引用以添加将检索页面的库。
还:确保将String URL变量更改为指向将从ASP.NET MVC站点加载路由的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";
}
}