2009-09-08 47 views
13

Tôi hiện đang phát triển một ứng dụng ASP.NET sử dụng MasterPage và tôi muốn đo thời gian tải của biểu mẫu web của ứng dụng và hiển thị thông tin đó cho khách hàng.Đo thời gian tải trang ASP.NET

chiến lược hiện tại của tôi liên quan đến việc sử dụng Application_BeginRequest sự kiện callback liên quan (trong file Global.asax dung dịch trang web của tôi), để bắt đầu đo thời gian dành cho quá trình server-side (như sau)

protected void Application_BeginRequest(Object sender, EventArgs e) { 
    Context.Items.Add("Request_Start_Time", DateTime.Now); 
} 

và tính toán thời gian trôi qua trên OnPreRender sự kiện callback liên quan của Webform, in nó trên một yếu tố giữ chỗ (như sau)

protected override void OnPreRender(EventArgs e) { 
    base.OnPreRender(e); 

    TimeSpan tsDuration = DateTime.Now.Subtract((DateTime)Context.Items["Request_Start_Time"]); 
    ExecutionTime.InnerHtml = "<em>Server-side processing duration: " + tsDuration.TotalMilliseconds + " miliseconds.</em>"; 
} 

đây là cách tốt nhất để đo thời gian tải? Có cách nào "thanh lịch" hơn để thực hiện việc này không?

Cảm ơn trước vì đã dành thời gian và hợp tác của bạn.

Trả lời

7

<% @ Page vết = "true" %> (hoặc thiết lập này trong web.config)

Bật theo dõi và kiểm tra các thông tin trong trace.axd (trong thư mục gốc của trang web của bạn).

Sau đó, bạn có thể thiết lập các điểm thời gian với:

Trace.Write("Start time intensive task"); 
Trace.Write("Stop time intensive task"); 

http://msdn.microsoft.com/en-us/library/bb386420.aspx

này là giả định "khách hàng của bạn" muốn dữ liệu debug sâu.

+0

Như tôi đã giới thiệu, tôi đang sử dụng Trang chính và tôi không tìm ra cách bật Trace trên đó, vì nó dường như không có thuộc tính "Dấu vết". Bạn có thể vui lòng giúp tôi với điều này? – XpiritO

+0

Bạn không cần phải lần lượt truy tìm trên trang, chỉ cần làm trong web.config của bạn, và nó sẽ làm việc cho tất cả các trang: http://msdn.microsoft.com/en-us/library/6915t83k.aspx Nhưng xin vui lòng không giữ thiết lập này cho sản xuất! – realMarkusSchmidt

+0

@markus "Chủ đề này không còn tồn tại" @ http://msdn.microsoft.com/en-us/library/6915t83k.aspx – Zack

1

Điều này thực sự phụ thuộc vào số liệu bạn đang thực sự hiển thị.

  1. Đây có phải là toàn bộ "trang được tải trong __ giây" loại nội dung luôn ở đó không?
  2. Đây có phải là để xác định xem giải pháp mã hóa của bạn có đáp ứng các yêu cầu cho khách hàng không và không cần thiết cho sản xuất?

Câu trả lời cho hai câu hỏi này sẽ quyết định điều gì có ý nghĩa nhất khi nói đến ghi âm. Nếu mục tiêu của bạn là # 1, thì tôi sẽ nói phương pháp của bạn hoạt động. Nếu bạn đang đi cho số 2, tôi có thể nhìn vào những gì Erwin có.

4

Ứng dụng của bạn dường như đủ chính xác, miễn là bạn không hiển thị cây điều khiển rất lớn và bạn không sử dụng các điều khiển máy chủ thực hiện tất cả công việc của họ theo phương pháp được ghi đè Render (tác giả kiểm soát máy chủ chưa có kinh nghiệm có xu hướng thực hiện chính xác cái đó...).

Trong trường hợp đó, có thực sự là một cách để hiển thị thời gian hiển thị thực tế ;-) Chỉ cần sử dụng đối tượng HttpResponse.Filter để điền một trình giữ chỗ với thời gian đã trôi qua. Các bộ lọc này được áp dụng sau biểu mẫu web được hiển thị và trước khi nó được chuyển đến ứng dụng khách.

Nếu bạn cần điều này chỉ để phát triển, hãy tìm kiếm trace.axd, điều này sẽ cung cấp cho bạn rất nhiều chi tiết không chỉ về thời gian mà còn cả ngữ cảnh yêu cầu, cấu trúc cây điều khiển và kích thước trang.

Các vấn đề liên quan