Thử thách lưu trữ web
Bạn phải nhớ rằng không có tùy chọn cấu hình máy nào khả dụng nếu bạn được lưu trữ trên một máy chủ dùng chung như nhiều người trong chúng ta (các công ty và cá nhân nhỏ hơn).
Chi tiết quản trị ASP.NET
Trang web của tôi mất ít nhất 30 giây khi nó không bị tấn công trong hơn 20 phút (và ứng dụng web đã bị dừng). Thật là khủng khiếp.
Một cách khác để kiểm tra hiệu suất
Có một cách khác để kiểm tra xem đó là ASP.NET MVC của bạn khởi động hay cái gì khác. Thả một trang HTML bình thường trên trang web của bạn, nơi bạn có thể nhấn nó trực tiếp.
Nếu sự cố liên quan đến ASP.NET MVC khởi động thì trang HTML sẽ hiển thị gần như ngay lập tức ngay cả khi ứng dụng web chưa được khởi động.
Đó là cách đầu tiên tôi nhận ra rằng vấn đề là ở phần khởi động ASP.NET MVC. Tôi đã tải một trang HTML bất cứ lúc nào và nó sẽ tải nhanh. Sau đó, sau khi nhấn trang HTML đó, tôi đã nhấn một trong các URL ASP.NET MVC của mình và tôi nhận được thông báo Chrome "Đang chờ raddev.us ..."
Một thử nghiệm khác với tập lệnh hữu ích
Sau đó, tôi đã viết một tập lệnh LINQPad (kiểm tra http://linqpad.net để biết thêm) sẽ truy cập trang web của tôi cứ sau 8 phút (ít hơn thời gian để ứng dụng giải nén - nên là 20 phút) và tôi để nó chạy hàng giờ
Trong khi tập lệnh đang chạy, tôi nhấn trang web của mình và mỗi khi trang web của tôi xuất hiện nhanh chóng. Điều này cho tôi một ý tưởng tốt mà rất có thể sự chậm chạp mà tôi gặp phải là do thời gian khởi động ASP.NET MVC.
Nhận LinqPad và bạn có thể chạy tập lệnh sau - chỉ cần thay đổi URL thành của riêng bạn và để nó chạy và bạn có thể kiểm tra điều này một cách dễ dàng. Chúc may mắn.
LƯU Ý : Trong LinqPad, bạn sẽ cần nhấn F4 và thêm một tham chiếu đến System.Net để thêm thư viện sẽ truy xuất trang của bạn.
CSONG : đảm bảo bạn thay đổi biến Chuỗi URL thành trỏ đến một URL sẽ tải tuyến từ trang web ASP.NET MVC của bạn để công cụ sẽ chạy.
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";
}
}