Контроль времени выполнения методов страницы ASP.Net

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

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

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

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

3 ответа

Я не уверен на 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

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

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

Другие вопросы по тегам