Soyez le premier à donner votre avis sur cette source.
Snippet vu 16 342 fois - Téléchargée 31 fois
' --------- 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 ' ------------------------------------------------------
10 août 2006 à 10:54
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;
}
18 août 2005 à 16:34
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
18 août 2005 à 11:06
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
13 janv. 2004 à 15:35
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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.