Мониторинг времени выполнения методов страницы ASP.Net - PullRequest
2 голосов
/ 13 мая 2009

Кто-нибудь может мне посоветовать, есть ли подходы для расчета времени выполнения методов на странице asp.net?

ASP.Net Trace меня не устраивает, поскольку он игнорирует частичные обратные передачи ajax, хотя они и являются узким местом.

У меня есть событие страницы, которое по неизвестной причине выполняется медленно. Поскольку логика и цепочка выполнения событий довольно сложны, я все еще не могу просто определить виновника в отладчике.

Я бы хотел измерить время выполнения каждого метода по всей странице, но я все еще не вижу способа, кроме как вставить избыточные строки кода (например, timeBegin = DateTime.Now .... timeEnd = DateTime.Now = timeBegin и т. Д.) в начале и в конце каждого метода. Это кажется уродливым подходом, кто-нибудь знает, как это сделать автоматически? Существуют ли инструменты для измерения времени выполнения методов?

Ответы [ 3 ]

1 голос
/ 15 мая 2013

Я не уверен на 100%, что приведенное ниже работает во всех случаях. Пока что, хотя. Обратите внимание, что Context.Session.Item ("CURRENT_WEB_USER") - это место, где я храню текущего пользователя, и поэтому недоступно как часть переменных сеанса asp.net.

Код, представленный ниже, заменяет Global.aspx , который обеспечивает как полную, так и временную привязку кода разработчика.

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
End Sub

Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
End Sub

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
End Sub

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
End Sub

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
End Sub

Sub Application_AcquireRequestState(sender As Object, e As System.EventArgs)
    If HttpContext.Current Is Nothing Then Return
    If HttpContext.Current.Session Is Nothing Then Return
    If TypeOf HttpContext.Current.CurrentHandler Is Page Then
        If Not Context.Items.Contains("Request_Start_Time") Then
            Dim MyPage As Page = HttpContext.Current.CurrentHandler
            AddHandler MyPage.Init, AddressOf PageInitEncountered
            AddHandler MyPage.Unload, AddressOf PageUnloadEncountered
            Context.Items.Add("Request_Start_Time", DateTime.Now)
            Dim User As String = Context.Session.Item("CURRENT_WEB_USER")
            Context.Items.Add("Request_User", User )
        End If
    End If

End Sub

Sub Application_ReleaseRequestState(sender As Object, e As System.EventArgs) 
    If HttpContext.Current Is Nothing Then Return
    If TypeOf Context.CurrentHandler Is Page Then
        Dim Page As Page = Context.CurrentHandler
        Dim StartDate As Date = Context.Items("Request_Start_Time") : If StartDate = Nothing Then Return
        Dim EndDate As Date = Now
        Dim StartProc As Date = Context.Items("Page_Init")
        Dim EndProc As Date = Context.Items("Page_Unload")
        Dim User As String = Context.Items("Request_User")
        LogEntry(StartDate, EndDate, StartProc, EndProc, User, Context.Request.Url.ToString)
    End If

End Sub

Public Sub PageInitEncountered(sender As Object, e As System.EventArgs)
    Context.Items.Add("Page_Init", DateTime.Now)
End Sub

Public Sub PageUnloadEncountered(sender As Object, e As System.EventArgs)
    Context.Items.Add("Page_Unload", DateTime.Now)
End Sub

Public Sub LogEntry(StartDate As Date, EndDate As Date, StartProc As Date, EndProc As Date, User As String, PageURL As String)
    System.Diagnostics.Debug.WriteLine(" (" & LogEntry.RequestMs & " - " & LogEntry.DurationMs & ") (" & User & ") " & PageURL)
End Sub
0 голосов
/ 13 мая 2009

Вы также можете использовать счетчики производительности asp.net и другие вещи. Но это не будет измерять скорость страницы, но будет измерять производительность всего приложения.

0 голосов
/ 13 мая 2009

Это может быть не то, что вы ищете, но RedGate имеет продукт под названием Performance Profiler, который делает именно это. У них есть 15-дневная пробная версия, так что вы даже можете скачать ее и опробовать в своем текущем выпуске. ИМХО, это стоит каждой копейки.

...