begin process at 2012 05 27 05:56:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > ASP.NET - CONNAÎTRE LE TEMPS D'EXECUTION DE SA PAGE OU DU CHARGEMENT D'UN OBJET

ASP.NET - CONNAÎTRE LE TEMPS D'EXECUTION DE SA PAGE OU DU CHARGEMENT D'UN OBJET


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Source .NET ( DotNet ) Classé sous :execution, chargement, objet, webconfig, usercontrol Niveau :Débutant Date de création :28/10/2003 Date de mise à jour :28/10/2003 20:44:15 Vu :13 729

Auteur : fabrice69

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Dans le cadre de développement et surtout dans un but d'optimisation, il est très utile de connaître le temps de chargement de certains objets et de la page globale.

Pour la page, on va passer par une astuce fournie sur le site de C2I (http://www.c2i.fr/code.aspx?IDCode=359) que j'ai adapté pour mes besoins.

Tout d'abord il faudra modifier le fichier Global.asax.vb, ensuite ajouter le contrôle utilisateur (User control) fourni et modifier le Web.config pour faire en sorte qu'il soit visible ou non.

Source

  • ' --------- Global.asax.vb ---------------------------
  • Imports System.Web
  • Imports System.Web.SessionState
  • ' -----------------------------------------------------
  • Public Class Global
  • Inherits System.Web.HttpApplication
  • Private dTimeDeb As DateTime
  • ....
  • ' -----------------------------------------------------
  • Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
  • ' Se déclenche lorsque la session se termine
  • Session.RemoveAll()
  • End Sub
  • ....
  • ' -----------------------------------------------------
  • Private Sub Global_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRequestHandlerExecute
  • dTimeDeb = DateTime.Now
  • End Sub
  • ' -----------------------------------------------------
  • Private Sub Global_PostRequestHandlerExecute(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PostRequestHandlerExecute
  • Session.Item("TempsExecutionPage") = DateTime.Now.Subtract(dTimeDeb).TotalMilliseconds.ToString
  • End Sub
  • ....
  • ' -----------------------------------------------------
  • End Class
  • ' ------------------------------------------------------
  • ' Dans le fichier Web.Config
  • ...
  • <appSettings>
  • ...
  • <add key="AfficheStats" value="1"/>
  • <!-- mettre 1 pour afficher les stats, 0 pour ne pas les afficher -->
  • ...
  • </appSettings>
  • ' ------------------------------------------------------
  • 'Maintenant il suffit de poser (dans Visual Studio.NET) le User Control
  • 'dans la page voulue et dans le source de cette page
  • '(disons toto.aspx et toto.aspx.vb) ajouter le code suivant.
  • ' Nous allons tester le temps de chargement d'un Dataset (il faudra l'adapter à vos besoins)
  • ' ------------------------------------------------------
  • ' Fichier toto.ASPX
  • ....
  • <%@ Register TagPrefix="uc1" TagName="AfficheStats" Src="AfficheStats.ascx" %>
  • ....
  • <uc1:AfficheStats id="AfficheStats1" runat="server"></uc1:AfficheStats>
  • ....
  • ' ------------------------------------------------------
  • ' Fichier toto.ASPX.VB
  • ....
  • Private dTimeDebSQL As DateTime
  • ....
  • ' On initialise la variable de temps
  • dTimeDebSQL = DateTime.Now
  • MonDataset = ... 'Chargement de mon Dataset
  • 'On ajoute en mémoire la valeur et le texte de présentation du temps
  • Session.Item("TempsExecutionSQL") &= "Chargement de MonDataset : " & DateTime.Now.Subtract(dTimeDebSQL).TotalMilliseconds.ToString & " ms<BR>"
  • ....
  • 'On peut en ajouter autant que l'on veut suivre dans la page simplement en remettant le même bloc.
  • dTimeDebSQL = DateTime.Now
  • MonDataset2 = ... 'Chargement de mon Dataset
  • 'On ajoute en mémoire la valeur et le texte de présentation du temps
  • Session.Item("TempsExecutionSQL") &= "Chargement de MonDataset2 : " & DateTime.Now.Subtract(dTimeDebSQL).TotalMilliseconds.ToString & " ms<BR>"
  • ....
  • ' ------------------------------------------------------
  • 'Copie de la source pour le Fichier User Control : AfficheStats.ascx (et .vb)
  • <%@ Control Language="vb" AutoEventWireup="false" Codebehind="AfficheStats.ascx.vb" Inherits="MonProjet.AfficheStats" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
  • <asp:Panel id="Panel1" runat="server" style="RIGHT:0px;BOTTOM:0px;POSITION:absolute;HEIGHT:auto">
  • <table class="AfficheStat" width="300" cellSpacing="0" cellPadding="0" border="0">
  • <tr width="100%">
  • <td>Temps exécution Page :</td>
  • <td><asp:Label id="LabelTempsExecPage" runat="server" Width="100%">Label</asp:Label></td>
  • </tr>
  • <tr>
  • <td>Temps exécution Requette :</td>
  • <TD><asp:Label id="LabelTempsExecRequette" runat="server" Width="100%">Label</asp:Label></TD>
  • </tr>
  • </table>
  • </asp:Panel>
  • ' ----------- AfficheStats.ascx.vb -----------------------------
  • Public MustInherit Class AfficheStats
  • Inherits System.Web.UI.UserControl
  • Protected WithEvents LabelTempsExecPage As System.Web.UI.WebControls.Label
  • Protected WithEvents Panel1 As System.Web.UI.WebControls.Panel
  • Protected WithEvents LabelTempsExecRequette As System.Web.UI.WebControls.Label
  • #Region " Code généré par le Concepteur Web Form "
  • 'Cet appel est requis par le Concepteur Web Form.
  • <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
  • End Sub
  • Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
  • 'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
  • 'Ne le modifiez pas en utilisant l'éditeur de code.
  • InitializeComponent()
  • End Sub
  • #End Region
  • Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  • Dim AfficheStats As String = ConfigurationSettings.AppSettings("AfficheStats")
  • If AfficheStats = 1 Then
  • Panel1.Visible = True
  • LabelTempsExecPage.Text = Session.Item("TempsExecutionPage") & " ms"
  • LabelTempsExecRequette.Text = Session.Item("TempsExecutionSQL")
  • Else
  • Panel1.Visible = False
  • End If
  • End Sub
  • End Class
  • ' ------------------------------------------------------
' --------- Global.asax.vb ---------------------------

Imports System.Web
Imports System.Web.SessionState

' -----------------------------------------------------
Public Class Global
    Inherits System.Web.HttpApplication
    Private dTimeDeb As DateTime

....
    ' -----------------------------------------------------
    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Se déclenche lorsque la session se termine
        Session.RemoveAll()
    End Sub
....
    ' -----------------------------------------------------
    Private Sub Global_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRequestHandlerExecute
        dTimeDeb = DateTime.Now
    End Sub

    ' -----------------------------------------------------
    Private Sub Global_PostRequestHandlerExecute(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PostRequestHandlerExecute
        Session.Item("TempsExecutionPage") = DateTime.Now.Subtract(dTimeDeb).TotalMilliseconds.ToString
    End Sub
....
    ' -----------------------------------------------------
End Class


' ------------------------------------------------------
' Dans le fichier Web.Config 
...
<appSettings>
...
 <add key="AfficheStats" value="1"/>
 <!-- mettre 1 pour afficher les stats, 0 pour ne pas les afficher -->
...
</appSettings>

' ------------------------------------------------------
'Maintenant il suffit de poser (dans Visual Studio.NET) le User Control 
'dans la page voulue et dans le source de cette page 
'(disons toto.aspx et toto.aspx.vb) ajouter le code suivant.
' Nous allons tester le temps de chargement d'un Dataset (il faudra l'adapter à vos besoins)

' ------------------------------------------------------
' Fichier toto.ASPX
....
<%@ Register TagPrefix="uc1" TagName="AfficheStats" Src="AfficheStats.ascx" %>
....
<uc1:AfficheStats id="AfficheStats1" runat="server"></uc1:AfficheStats>
....

' ------------------------------------------------------
' Fichier toto.ASPX.VB
....
    Private dTimeDebSQL As DateTime
....

' On initialise la variable de temps
dTimeDebSQL = DateTime.Now
MonDataset = ... 'Chargement de mon Dataset

'On ajoute en mémoire la valeur et le texte de présentation du temps
Session.Item("TempsExecutionSQL") &= "Chargement de MonDataset : " & DateTime.Now.Subtract(dTimeDebSQL).TotalMilliseconds.ToString & " ms<BR>"
....

'On peut en ajouter autant que l'on veut suivre dans la page simplement en remettant le même bloc.

dTimeDebSQL = DateTime.Now
MonDataset2 = ... 'Chargement de mon Dataset

'On ajoute en mémoire la valeur et le texte de présentation du temps
Session.Item("TempsExecutionSQL") &= "Chargement de MonDataset2 : " & DateTime.Now.Subtract(dTimeDebSQL).TotalMilliseconds.ToString & " ms<BR>"
....

' ------------------------------------------------------
'Copie de la source pour le Fichier User Control : AfficheStats.ascx (et .vb)

<%@ Control Language="vb" AutoEventWireup="false" Codebehind="AfficheStats.ascx.vb" Inherits="MonProjet.AfficheStats" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<asp:Panel id="Panel1" runat="server" style="RIGHT:0px;BOTTOM:0px;POSITION:absolute;HEIGHT:auto">
<table class="AfficheStat" width="300" cellSpacing="0" cellPadding="0" border="0">
 <tr width="100%">
  <td>Temps exécution Page :</td>
  <td><asp:Label id="LabelTempsExecPage" runat="server" Width="100%">Label</asp:Label></td>
 </tr>
 <tr>
  <td>Temps exécution Requette :</td>
  <TD><asp:Label id="LabelTempsExecRequette" runat="server" Width="100%">Label</asp:Label></TD>
 </tr>
</table>
</asp:Panel>

' ----------- AfficheStats.ascx.vb -----------------------------
Public MustInherit Class AfficheStats
    Inherits System.Web.UI.UserControl
    Protected WithEvents LabelTempsExecPage As System.Web.UI.WebControls.Label
    Protected WithEvents Panel1 As System.Web.UI.WebControls.Panel
    Protected WithEvents LabelTempsExecRequette As System.Web.UI.WebControls.Label

#Region " Code généré par le Concepteur Web Form "

    'Cet appel est requis par le Concepteur Web Form.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
        'Ne le modifiez pas en utilisant l'éditeur de code.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim AfficheStats As String = ConfigurationSettings.AppSettings("AfficheStats")

        If AfficheStats = 1 Then
            Panel1.Visible = True
            LabelTempsExecPage.Text = Session.Item("TempsExecutionPage") & " ms"
            LabelTempsExecRequette.Text = Session.Item("TempsExecutionSQL")
        Else
            Panel1.Visible = False
        End If

    End Sub

End Class
' ------------------------------------------------------

 Conclusion

Cet outil est très simple.

En revanche il faut prendre garde dans le cas de l'utilisation d'un Handler dans la page où on place ce User Control, en effet, le système des Handlers ne gère pas le chargement de la variable de session dans le Global.asax, ainsi la page ne fonctionnera pas et l'initialisation du timer de chargement de la page ne sera pas possible et surtout ca fait planter le Handler.

Il faut juste ne pas utiliser le calcul du temps global d'exécution de la page, en revanche celui de chaque objet se fait sans soucis.

-----------------------------
Bon coding.

Romelard Fabrice (Alias F___)


 Sources du même auteur

Source .NET (Dotnet) SHAREPOINT 2007 - OBTENIR LA LISTE DES WEBPARTS DANS UNE PAG...
Source .NET (Dotnet) SHAREPOINT 2007 - OBTERNIR LA LISTE DES FEATURES D'UN SITE
Source avec une capture Source .NET (Dotnet) SHAREPOINT 2007 - CHARGER LA LISTE DES COLLATIONS SHAREPOINT...
Source avec une capture Source .NET (Dotnet) SHAREPOINT 2007 - CHARGER LA LISTE DES LANGUES INSTALLÉES DA...
Source .NET (Dotnet) C# - FONCTION TRÈS SIMPLE POUR ENVOYER UN MAIL VIA SMTP

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) ASP.NET - SAVOIR QUAND L'UTILISATEUR FERME LA FENETRE VIA CA... par werdDomain
CLASSE IMBRIQUÉS EN VBSCRIPT DE DOSSIERS (APPLICABLE ASP) par internetdev
Source avec Zip SÉRIALISER / DÉSÉRIALISER DES VARIABLES EN ASP par lejdu
CREATION D'UN AUTOCOMPLETE JQUERY AVEC UN CODE SOURCE ASP ET... par dedebis84
Source .NET (Dotnet) RÉCUPÉRER DES VALEURS D'UNE LIGNE DANS UN DATAGRID APRÈS AVO... par PascalCmoa

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) GRIDVIEW DATE PICKER JAVASCRIPT par fredzool
Source avec Zip Source .NET (Dotnet) EMPÊCHER LES ERREURS DES USERSCONTROLS DE FAIRE PLANTER TOUT... par Nurgle
Source avec Zip Source .NET (Dotnet) EVITER QUE LES ERREURS DES USERCONTROLS, ARRETENT LE FONCTIO... par jesusonline
Source .NET (Dotnet) MASQUER LA VERSION D'ASP.NET DANS LE HEADER HTTP SANS FILTRE... par poppyto
Source avec une capture Source .NET (Dotnet) USER CONTROL POUR AFFICHER LA DESCRIPTION D'UN PRODUIT par jesusonline

Commentaires et avis

Commentaire de fyrrhom le 13/01/2004 15:35:41

Bonjour,

je viens de le tester, mais le temps ne s'affiche pas.
Est-ce qu'il y a possibilité d'avoir des exemples de pages dans un zip.
Merci d'avance

Commentaire de Gb3n le 18/08/2005 11:06:39

Bonjour,
Principe fort intéressant mais un problème survient alors de l'utilisation de la collection "session" pour relater le temps d'execution à la page:
l'évenement du global.asax "PostRequestHandlerExecute" se déroule après l'évenement "Page_Load" de la page renvoyée. Ainsi lors du premier chargement (appel du "page_load")la variable de session "TempsExecutionPage" n'existe pas, elle n'existera qu'apres avoir exécuté "PostRequestHandlerExecute", c'est à dire juste après. Deplus ceci engendre un décalage de l'information, on ne connait pas la durée d'execution de la page en cours mais seulement celui de la page précédente.

exemple:

* première requete
  -page_load
     session.item("TempsExecutionPage") égale à "rien"
     donc affichage "rien"
  -PostRequestHandlerExecute
     session.item("TempsExecutionPage") = 0,32 ms (temps indicatif de chargement de la page de la premiere requete)

* seconde requete
  -page_load
     session.item("TempsExecutionPage") égale à 0,32 (temps de la premiere requete )
     donc affichage 0,32
  -PostRequestHandlerExecute
     session.item("TempsExecutionPage") = 1.02 ms (temps indicatif de chargement de la page de la seconde requete)

* troisieme requete
  -page_load
     session.item("TempsExecutionPage") égale à 1.02 (temps de la seconde requete )
     donc affichage 1.02
  -PostRequestHandlerExecute
     session.item("TempsExecutionPage") = 0.62 ms (temps indicatif de chargement de la page de la troisieme requete)

On affiche alors le temps de la page précédente à chaque fois ...

Pour remedier à cela il faudrait un évènement du global.asax qui s'excute juste avant le "pre_render" de la page...
Personnellement je n'ai pas trouvé ...
Domage l'idée était bonne ...
Bye

Commentaire de Gb3n le 18/08/2005 16:34:33

re bonjour,
je tappotais mon rapport de stage quand la solution m'éclata au grand jour (et oui comme dans les films ...). Bète je suis de ne pas y avoir pensé plus tôt tellement est simple la solution:

En faite il suffit de fixer la date de début de l'exécution de la page dans la session lors de l'évènement "Global_PreRequestHandlerExecute". Ainsi nous obtenons le début de la création de la page.
Et la fin de la création de celle ci, permettant tout de même de réécrire un élément sur cette dernière, n'est autre que l'évènement "pre_render".
Donc dans ce dernier évènement on récupère la date de début qui se trouve dans la session que l'on soustrait à "now" et on affiche le tout dans un champ text par exemple.
Certe ceci fausse un peu la vraie valeur car une fois la soustraction faite l'exécution de la page n'est pas réellement terminée mais bon l'affectation d'une  valeur dans un champ text prend tellement peu de temps ...

Voili voilou !
bye

Commentaire de morisse le 10/08/2006 10:54:34

.NET 2 propose une classe tres simple pour ce genre de choses (Stopwatch) dans System.Diagnostics.
http://msdn2.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

Ici un bout de code (C#) qui se passe de commentaire... ou presque

using System.Diagnostics;

public void MyFunction()
{
     Stopwatch sw= new Stopwatch();
     sw.Start();
     ////////////////////////
     //'Code' a chronometrer
     ////////////////////////
     sw.Stop();

     long lngDuration = sw.ElapsedMilliseconds;
}

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[ASP.NET/VB.NET] Chargement d'un UserControl [ par Netlink ] Bonjour &#224; tous, Je cherche un moyen de charger un contr&#244;le utilisateur en fonction p Pb avec le composant ASPEXEC [ par cracozore ] Bonjour &#224; tous,J'ai un probl&#232;me quand je fait apel au composant AspExec, j'obtiens ce message d'erreur :"Type d'erreur :Objet Server, ASP 01 associer objet et variables ? [ par aurelien2003 ] bonjour,je m'explique, imaginons que j'ai 3 labels : label1, label2 et label3.j'ai &#233;galement un integer i qui varie de 1 &#224; 3 comment faire p Bouton et chargement de page [ par Ayanami104 ] Bonjour, J'ai encore besoin de votre aide ^^ Jai un bouton qui change le style dun div. (ex: qui le passe d'un fond bleu a rouge) Imaginons qu'il soit ASP.NET et notion d'objet [ par blueangel ] Bonjour tout le monde,je d&#233;bute dans ASP.NET mais j'ai pas mal de notion sur l'orient&#233; objet, et puisque g&#233;rer du code C# c'est carr&#2 usercontrol et html [ par tmcuh ] bonjour voil&#224; toujours un petit probl&#232;me avec mon control utilisateur web. En fait dans le code html de celui-ci je d&#233;finis un lien hyp Comment accèder à une classe sur un serveur (Web Service) ? [ par digital3d ] J'ai donc un Web Service sur le serveur, le web service s'appelle "toto.asmx", &#224; c&#244;t&#233; du web service, j'ai cr&#233;er une classe appel& Impossible d'ajouter des éléments à un objet Dictionary [ par Chris_LaFouine ] J'ai un probl&#232;me concernant l'objet Dictionary... voil&#224; mon code...set dictListeParam=Server.CreateObject("Scripting.Dictionary")While NOT r exception: System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet. [ par firas_tn ] Salut a tousj'ai un programmes ou il ya quelques erreurs dont une que je vous envoi et je n'ai pas trouv&#233; comment la corriger,voila la ligne ou s Exception: System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet. [ par firas_tn ] Salut a tousj'ai un programme ou il ya quelques erreurs dont une que je vous envoi et je n'ai pas trouv&#233; comment la corriger,voila la ligne ou s'


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,558 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales