none
Temps ... à heure fixe RRS feed

  • Question

  • Bonjour tout le monde,

    J'ai une application (web) qui met un temps fou à lancer une procédure événementielle, alors avant de me rendre compte que le plus gros du délai se trouve entre le clic sur le bouton et le début de la procédure événementielle, j'ai voulu mesurer le temps entre deux instructions.

    J'ai donc écrit cette procédure :

        protected void ecritTrace(string intitule)
        {
            DateTime dt = new DateTime();
            dt = DateTime.Now;
            System.Diagnostics.Debug.Print(dt.ToString("dd.MM.yyyy HH:mm:ss.ffff") + " : " + intitule);
            dt = DateTime.MinValue;
        }

    et là, surprise, j'ai le temps d'écrire un enregistrement dans une table et de créer trois ressources le concernant, après il est toujours la même heure.

    Où ai-je pu me fourvoyer ?

    J'ai essayé dt = null, à la fin, mais je me suis fait rappeler à l'ordre. J'aurais dû mettre un point d'interrogation devant le type, peut-être. De toute manière je ne lui ai pas trouvé de méthode Dispose.

    lundi 9 juin 2014 15:35

Réponses

  • Bonjour

    C'est peu probable, mais vous faites des traitements asynchrones entre les appels d’ecritTrace?

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse Gloops mardi 10 juin 2014 11:40
    mardi 10 juin 2014 09:15
  • Bon, ça y est.

    En fait il y a deux explications :

    • d'une part j'ai tardé à trouver le code pour les fractions de secondes, et donc j'avais fait les tests avec un temps arrondi à la seconde
    • d'autre part surtout, je n'avais pas pris en compte les événements liés à la source de données, qui représentent la plus grande partie du traitement.

    En définitive le résultat est ce qui suit :

    10.06.2014 13:14:24.7187 : Début btnCreer_Click
    10.06.2014 13:14:24.7812 : Début écriture base
    10.06.2014 13:14:24.8125 : Début dsPlat_Inserting
    10.06.2014 13:14:24.8125 : Fin   dsPlat_Inserting
    10.06.2014 13:14:26.0937 : Début dsPlat_Inserted
    10.06.2014 13:14:26.0937 : Fin   dsPlat_Inserted
    10.06.2014 13:14:26.0937 : Début écriture ressources
    10.06.2014 13:14:26.6250 : Fin écriture ressources
    10.06.2014 13:14:26.6250 : Début apparition panel
    10.06.2014 13:14:26.6250 : Fin   apparition panel
    

    Il s'avère donc qu'on met environ deux secondes à écrire un enregistrement dans la table SQL Express, ce qui étant donné la machine sur laquelle ça se passe n'est pas étonnant du tout, et que la mise à jour des ressources prend une demi-seconde, ce qui dans les mêmes conditions paraît convenable.

    Il est dommage que le code Button_OnClick mette pas loin d'une minute à démarrer après le clic sur le bouton, mais ceci ne peut pas se diagnostiquer avec la procédure que j'ai écrite ci-dessus me semble-t-il.

    Donc mon impression de voir toujours la même heure découlait de deux "absences" de ma part, la plus significative m'étant venue à l'esprit à l'évocation de ce mot de traitement asynchrone.

    Merci.

    • Marqué comme réponse Gloops mardi 10 juin 2014 11:40
    mardi 10 juin 2014 11:39

Toutes les réponses

  • Bonjour,

    La dernière ligne de code votre méthode ecritTrace() ne sert à rien, vous pouvez la retirer.

    Votre code semble correcte... Est-ce que vous n'auriez pas un champ qui s'appelle "dt" dans votre classe ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    lundi 9 juin 2014 23:26
    Modérateur
  • Bonjour, merci.

    En dernière ligne je voulais mettre dt = null, pour être sûr qu'à l'appel suivant la variable soit initialisée. Mais ce n'était pas possible, une variable DateTime ne peut pas être null.

    Non, j'ai cherché dans toute la solution, il y avait DTD dans les entêtes HTML, mais en mot entier il n'y a que là.

    D'ailleurs, je me représentais qu'en cas de conflit de noms c'est la variable la plus locale qui l'emporte.


    • Modifié Gloops mardi 10 juin 2014 06:51
    mardi 10 juin 2014 06:50
  • Bonjour

    C'est peu probable, mais vous faites des traitements asynchrones entre les appels d’ecritTrace?

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse Gloops mardi 10 juin 2014 11:40
    mardi 10 juin 2014 09:15
  • Bonjour,

    J'étais sur le point de répondre non ...

    En fait le bouton lance une requête, mais c'est l'événement sur insertion de la source de donnée qui effectue la suite du traitement. Il faut donc aussi que je mette un appel à la fonction ecritTrace dans cet événement.

    Je vais regarder ça, merci.

    mardi 10 juin 2014 10:02
  • Bon, ça y est.

    En fait il y a deux explications :

    • d'une part j'ai tardé à trouver le code pour les fractions de secondes, et donc j'avais fait les tests avec un temps arrondi à la seconde
    • d'autre part surtout, je n'avais pas pris en compte les événements liés à la source de données, qui représentent la plus grande partie du traitement.

    En définitive le résultat est ce qui suit :

    10.06.2014 13:14:24.7187 : Début btnCreer_Click
    10.06.2014 13:14:24.7812 : Début écriture base
    10.06.2014 13:14:24.8125 : Début dsPlat_Inserting
    10.06.2014 13:14:24.8125 : Fin   dsPlat_Inserting
    10.06.2014 13:14:26.0937 : Début dsPlat_Inserted
    10.06.2014 13:14:26.0937 : Fin   dsPlat_Inserted
    10.06.2014 13:14:26.0937 : Début écriture ressources
    10.06.2014 13:14:26.6250 : Fin écriture ressources
    10.06.2014 13:14:26.6250 : Début apparition panel
    10.06.2014 13:14:26.6250 : Fin   apparition panel
    

    Il s'avère donc qu'on met environ deux secondes à écrire un enregistrement dans la table SQL Express, ce qui étant donné la machine sur laquelle ça se passe n'est pas étonnant du tout, et que la mise à jour des ressources prend une demi-seconde, ce qui dans les mêmes conditions paraît convenable.

    Il est dommage que le code Button_OnClick mette pas loin d'une minute à démarrer après le clic sur le bouton, mais ceci ne peut pas se diagnostiquer avec la procédure que j'ai écrite ci-dessus me semble-t-il.

    Donc mon impression de voir toujours la même heure découlait de deux "absences" de ma part, la plus significative m'étant venue à l'esprit à l'évocation de ce mot de traitement asynchrone.

    Merci.

    • Marqué comme réponse Gloops mardi 10 juin 2014 11:40
    mardi 10 juin 2014 11:39