2009-05-13 23 views
2

quelqu'un pourrait-il me conseiller, y at-il des approches pour calculer le temps d'exécution des méthodes dans la page asp.net?ASP.Net page méthodes d'exécution de surveillance du temps

ASP.Net Trace ne me convient pas, car il ignore les ajouts partiels ajax, mais ils sont juste l'endroit serré.

J'ai l'événement de page qui pour une raison inconnue s'exécute lentement. Comme la chaîne d'exécution de la logique et des événements est plutôt compliquée, je ne peux toujours pas déterminer le coupable dans le débogueur. Je voudrais mesurer le temps d'exécution de chaque méthode sur la page, mais je ne vois toujours pas comment insérer des lignes de code redondantes (comme timeBegin = DateTime.Now .... timeEnd = DateTime.Now = timeBegin etc) au début et à la fin de chaque méthode. Il semble être une approche laide, quelqu'un sait-il comment le faire automatiquement? Existe-t-il des outils qui mesurent le temps d'exécution des méthodes disponibles?

Répondre

0

Cela peut ne pas être ce que vous cherchez, mais RedGate a un produit appelé Performance Profiler qui fait exactement cela. Ils ont un essai de 15 jours, vous pouvez même le télécharger et l'essayer sur votre numéro actuel. À mon humble avis, ça vaut chaque centime.

+0

merci. mais l'élément de menu 'performance au niveau de la méthode du profil' provoque une boîte de message 'La cible du projet actif n'est pas un fichier exécutable. Choisissez un projet qui crée un programme exécutable ou définissez un programme externe dans les paramètres du projet. (le projet actif est mon application web). Donc, je ne sais pas comment le faire fonctionner. –

+0

Eh bien, en fonction de l'endroit où vous essayez d'exécuter le projet (IIS ou Visual Studio Web), vous pouvez sélectionner une autre option pour l'emplacement du lien du profileur dans l'application en cours d'exécution. J'ai réussi à déboguer les sites VS et IIS. Regardez les vidéos de démonstration car elles vous aideront à le faire. – hacker

0

Vous pouvez également utiliser les compteurs de performance asp.net. Mais cela ne permettra pas de mesurer une vitesse de la page, mais ils vont mesurer une performance globale de l'application.

1

Je ne suis pas sûr à 100% que ce qui suit fonctionne dans tous les cas. Jusqu'à présent, cependant. Notez que Context.Session.Item ("CURRENT_WEB_USER") est où je stocke l'utilisateur actuel, et n'est donc pas facilement disponible dans le cadre des variables de session asp.net.

Le code ci-dessous est en remplacement de Global.aspx qui permet à la fois la synchronisation de la pleine page et la synchronisation du code du développeur.

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