2011-10-11 29 views
5

Xét đoạn mã sau để đo thời gian request/response trong một ứng dụng Asp.Net:cách chính xác để đo lần request/response của một ứng dụng Asp.Net MVC

protected void Application_EndRequest() 
{ 
    Trace.WriteLine(string.Format("{0}:{1}", 
     (DateTime.Now - HttpContext.Current.Timestamp).TotalMilliseconds, 
     HttpContext.Current.Request.RawUrl)); 
} 

Theo MSDN, DateTime.Now có xấp xỉ độ phân giải 10 mili giây.

Ngoài ra, từ MSDN HttpContext.Timestamp description,

Các dấu thời gian trở về từ các Timestamp tài sản là thời gian địa phương của máy chủ và được thiết lập trong instantiation của đối tượng HttpContext. Giờ địa phương bằng với thời gian UTC cộng với chênh lệch UTC.

Đoạn mã trên nên theo lý thuyết sau đó cho tôi tổng thời gian yêu cầu/phản hồi theo mili giây.

Câu hỏi của tôi là, độ chính xác của điều này sẽ như thế nào? Và có cách nào chính xác hơn hay tốt hơn để thực hiện nó không?

Trả lời

3

Lớp StopWatch có thể có độ chính xác xuống đến micro giây tùy thuộc vào phần cứng và hệ điều hành. Có một thuộc tính IsHighResolution để đọc nếu bạn đang ở chế độ có độ phân giải cao. Nếu không thì bạn sẽ giảm độ chính xác của bộ hẹn giờ hệ thống.

http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

Phía lên của việc sử dụng lớp này là bạn chắc chắn sẽ không tồi tệ hơn rằng mã trên. Nếu trên hi-res, bạn sẽ có được chính xác hơn nhiều.

Nhưng, nếu bạn đang cố gắng đo lường hiệu suất và hiểu rõ hơn về dịch vụ của mình, thì có những công cụ tốt hơn.

Ví dụ, perfview là một công cụ tốt:

http://blogs.msdn.com/b/dotnet/archive/2012/10/09/improving-your-app-s-performance-with-perfview.aspx

+0

Cảm ơn, tôi đã xem xét điều này, tuy nhiên tôi sẽ phải bắt đầu (và lưu trữ) StopWatch ở đâu đó. HttpContext.Current.Timestamp được thêm vào khá sớm trong đường ống nên có vẻ như là một nơi tốt để đo thời gian phản hồi từ đó. – magritte

+0

Chấp nhận điều này làm câu trả lời và sẽ nối thêm câu trả lời của bạn với giải pháp. – magritte

7

Bạn có thể thử bằng cách sử dụng miniProfiler trong mã của bạn, tôi đã tìm thấy nó khá gọn gàng và hữu ích:

http://miniprofiler.com/

+0

Cảm ơn, tôi sẽ xem xét điều này – magritte

+0

Cảm ơn Druegor, điều này trông thực sự tốt nhưng tôi đã đi với phương pháp trên :-) – magritte

+0

MiniProfiler chắc chắn là con đường để đi nhưng chỉ khi bạn không thể sử dụng New Relic Agent trên Máy chủ IIS của bạn - https://newrelic.com/docs/dotnet/ –

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